私はAppleのApp Developmentを使っています。Swift iBookでは構造体の章まで、特にプロパティオブザーバのセクションまでかなりスムーズなセーリングが行われています。私は単位変換をチェックすることが任されています。引数なしでHeight型のイニシャライザを呼び出せません
struct Height {
var heightInInches: Double {
willSet(imperialConversion) {
print ("Converting to \(imperialConversion)")
}
didSet {
if (heightInInches == (heightInCentimeters * 0.393701)) {
print ("Height is \(heightInInches)")
}
}
}
var heightInCentimeters: Double {
willSet(metricConversion) {
print ("Converting to \(metricConversion)")
}
didSet {
if (heightInCentimeters == (heightInInches * 2.54)) {
print ("Height is \(heightInCentimeters)")
}
}
}
init(heightInInches: Double) {
self.heightInInches = heightInInches
self.heightInCentimeters = heightInInches*2.54
}
init(heightInCentimeters: Double) {
self.heightInCentimeters = heightInCentimeters
self.heightInInches = heightInCentimeters/2.54
}
}
let newHeight = Height()
newHeight.heightInInches = 12
書籍とSwiftのドキュメントから、これはうまくいくと思います。しかし、次のようなエラーメッセージが表示されます。
"引数なしで '高さ'タイプのイニシャライザを起動できません。
- これはどういう意味ですか、私は何を誤解していますか?
- これを修正するにはどうすればよいですか?下部の
@シェードが正しいです。このシナリオでは、 'Height'が' Class'のように動作すると考えることができます。 'init(heightInIches:)'と 'init(heightInCentimeters:)'という2つのinitsを定義しているので、そのようなnewHeightを "インスタンス化"することはできません。 (*でも*を使うことができると付け加えますが、2行目のコードでは最初のinitが必要であることを示唆しています。 – dfd