我们知道如何将Swift枚举暴露给Obj-C:
@objc enum Animal: Int {
case Cat, Dog
}
但编译器抱怨以下"无法在Obj-C"中表示:
func myAnimal() -> Animal? {
if hasPet() {
return .Cat
} else {
return nil
}
}
想法?
答案 0 :(得分:0)
Swift中的可选Int不会映射到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
}
}
这样,您可以更改方法签名以不返回可选项,编译器会很高兴。