gpt4 book ai didi

objective-c - 我们如何将一个可选的枚举值从 Swift 返回到 Obj-C?

转载 作者:搜寻专家 更新时间:2023-11-01 05:35:28 24 4
gpt4 key购买 nike

我们知道如何将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com