作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我们知道如何将 Swift 枚举暴露给 Obj-C:
@objc enum Animal: Int {
case Cat, Dog
}
但是编译器提示以下“无法在 Obj-C 中表示”:
func myAnimal() -> Animal? {
if hasPet() {
return .Cat
} else {
return nil
}
}
想法?
最佳答案
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
}
}
这样,您可以将方法签名更改为不返回可选值,编译器会很高兴。
关于objective-c - 我们如何将一个可选的枚举值从 Swift 返回到 Obj-C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41619304/
我是一名优秀的程序员,十分优秀!