私はスウィフトにJavaクラスを変換しようとしています:新 - failable初期化子
// Card class with only a main function
public class Card {
// fields
private int numvalue;
// constructor(s)
public Card(int v) {
if (v > 0 && v < 11) {
this.numvalue = v;}
else {
System.out.println("Error: Card value is outside the allowed range.
Value must be between 1 and 10 inclusive.")
}
Iは1と10の間にない値で、コンストラクタを使用して、カードオブジェクトを初期化しようとすると、初期化が失敗し、その値が許容範囲内にないことを説明する文がターミナルに印刷されます。私はSwiftでこれを作り直そうとしました。
class Card {
var numValue : Int?
init(numValue:Int) {
if (numValue > 0 && numValue < 11) {self.numValue = numValue}
else {print("Card value must be between 0 and 11")}
}
func setNumValue(value:Int) ->() {
self.numValue = value
}
func getNumValue() -> Int {
return self.numValue!
}
}
適切な例では上記の作品が、私はまだsetNumValue(値:)値を変更する方法を使用することができますので、受け入れられない値が渡された場合でも、まだカードのインスタンスを作成するために表示されます。
私はinit(numvalue :)メソッドを利用可能にしようとしましたが、初期化が成功した場合はOptional(Card)を取得しました。理想的には、正常に初期化されたCardオブジェクトがCardオブジェクトであり、Cardを含むOptionalではないことが望ましいです。これは可能ですか?
あなたのJavaクラスdoesnの範囲を渡します't faiあなたが無効な番号を入力した場合、lは単に 'numvalue'を設定しません。コンストラクタから 'Card'インスタンスを取得します。 Swiftでは、オプションで成功するかどうかを知るために、オプションの初期化子から戻ってくるオプションを条件付きで* unwrap *したいでしょう。言語ガイドの[オプション]セクション(https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid)を読むことを強くお勧めします。/TP40014097-CH5-ID330)を参照してください。 – Hamish
@LouisDeVesto Hamishのコメントに追加するには:Javaのコンストラクタには、Swiftの利用可能なイニシャライザと同等の機能はありません。代わりに、Javaでは、新しいオブジェクトを返すか、 'null'を返すコンストラクタを呼び出す静的メソッドを使用します。 – Alexander
また、btwの場合、値が範囲内にあるかどうかを確認することができます。 'if 1 ... 10〜= numValue {... ' – Alexander