オプションSwiftのIntsはObjective-Cの型にマップしません。問題は、myAnimal()メソッドがObjective-Cで表現できない型を返すことです。
私はそれを参照してください方法は、次の2つのオプションを持っている...
オプション1:あなたのメソッドの戻り値の型に変更します。
func myAnimal() -> NSNumber? {
// method body goes here.
}
をこれは本当にあなた」のObjective-Cで以来、偉大ないないようです
if (myAnimal().integerValue == AnimalCat) {
// do stuff here
}
オプション2:このような何かをしなければならないdは、あなたの列挙型でキャッチオールケースを追加
@objc enum Animal: Int {
case none = 0
case cat = 1
case dog = 2
init(rawValue: Int) {
switch rawValue {
case 1: self = Cat
case 2: self = Dog
default: self = None
}
}
}
// Updated method signature that makes the compiler happy.
func myAnimal() -> Animal {
if hasPet() {
return .Cat
} else {
return .None
}
}
このようにして、オプションシグニチャを返さないようにメソッドのシグネチャを変更することができ、コンパイラは満足できます。
あなたの列挙型に 'case none'を追加しますか? –
エラーメッセージがその事実を表しています。 Objective-Cでは、非参照型のオプション値を表すことはできません。 1つの可能な回避策は、 'nil'のようなケースをenumに追加することです - ' case none、cat、dog'。 – OOPer
私は、面白いオプションの列挙型を見つけました。列挙型は、いくつかの可能性のあるケースの1つを表す必要があります。それをオプションにすると、隠された状態の母親が追加されます。 @CodeDifferentによって提案されているように、代わりに 'none'の場合があります。あなたはそれがあなたの問題を解決するかどうかはわかりません。 – vikingosegundo