gpt4 book ai didi

swift - 如何在 Objective-C 中表示一个可选的 bool 值(Bool?)?

转载 作者:可可西里 更新时间:2023-10-31 23:56:33 31 4
gpt4 key购买 nike

我正在尝试用 swift 编写一个协议(protocol)

@objc protocol RestAPIManagerDelegate {

optional func credentialValidated(isValid: Bool?)
}

但我收到以下错误:

'Method cannot be marked @objc because the type of the parameter cannot be represented in Objective-C'

有什么建议吗?

最佳答案

问题是这个类型声明:

`isValid: Bool?`

这在 Swift 中非常好。但是你不能将它暴露给 Objective-C,因为 Objective-C 没有任何可选 BOOL 的概念——Objective-C 中的 BOOL 基本上只是一个数字,一种原始的 C 数据类型(我们称之为 标量).

这是另一种看待它的方式。在与 Objective-C 的交互中,您可以在 Objective-C 可以说 nil 的任何地方使用 Swift Optional - 实际上,在很大程度上,Swift Optional 的存在正是为了处理 Objective- C nil 或者你可能需要对 Objective-C 说 nil。但是 Objective-C 中的 BOOL 永远不可能是 nil - 它只能是 YES 或 NO(Swift truefalse)。

所以你有三个选择:

  • 去掉将所有这些暴露给 Objective-C 的 @objc

  • 移除 Optional 并声明该类型为 Bool

  • 使用对象类型。例如,将类型声明为 AnyObject?(或 NSNumber?)。这是可行的,因为 Swift 会将 Bool 桥接到 NSNumber(包括当它传递到 AnyObject 时),而 Objective-C 将很好地处理 Optional AnyObject 或 Optional NSNumber,因为它们是对象类型,而不是标量。

关于swift - 如何在 Objective-C 中表示一个可选的 bool 值(Bool?)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30722448/

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