Swift中的可選Ints不映射到Objective-C中的類型。問題是你的myAnimal()方法返回的是無法在Objective-C中表示的類型。
的方式我看到它,你有兩個選擇......
選項1:更改方法的返回類型:
func myAnimal() -> NSNumber? {
// method body goes here.
}
這並沒有真正因爲在Objective-C看起來很大,你」 ð必須做這樣的事情:
if (myAnimal().integerValue == AnimalCat) {
// do stuff here
}
選項2:在您的枚舉添加一個包羅萬象的情況下
@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中,你不能表示非引用類型的可選值。一種可能的解決方法是在你的枚舉中加入'nil'類的情況 - '沒有,貓,狗'的情況。 – OOPer
我發現一個可選的枚舉相當有趣。枚舉應該代表幾種可能情況之一。使其可選添加一個隱藏的狀態的母親。正如@CodeDifferent建議的那樣,我會有一個「無」情況。你我不確定這是否能解決你的問題。 – vikingosegundo