gpt4 book ai didi

objective-c - 类型 'Boolean' 不符合协议(protocol) 'BooleanType'

转载 作者:IT王子 更新时间:2023-10-29 05:35:03 24 4
gpt4 key购买 nike

在尝试根据 Apple 文档(和 tutorial-ized)创建 Launch Helper 时,我似乎遇到了由于将 Objective-C 代码移植到 Swift 中而引起的问题……谁的编译器不能再这样了在这种情况下是多余的。

import ServiceManagement

let launchDaemon: CFStringRef = "com.example.ApplicationLauncher"

if SMLoginItemSetEnabled(launchDaemon, true) // Error appears here
{
// ...
}

错误似乎一直是:

类型“Boolean”不符合协议(protocol)“BooleanType”

我已经尝试在多个位置转换为 Bool,以防我只是处理 redundant, archaic primitive。 (由 Obj-C 或 Core Foundation 引入),无济于事。

以防万一,我试过转换响应:

SMLoginItemSetEnabled(launchDaemon, true) 为 Bool

产生错误:

'Boolean' 不能转换为 'Bool'

……是认真的吗?

最佳答案

Boolean 是“历史 Mac 类型”并声明为

typealias Boolean = UInt8

所以这个编译:

if SMLoginItemSetEnabled(launchDaemon, Boolean(1)) != 0 { ... }

Boolean 类型有以下扩展方法(我不确定之前是否发布过,我现在找不到):

extension Boolean : BooleanLiteralConvertible {
public init(booleanLiteral value: Bool) {
self = value ? 1 : 0
}
}
extension Boolean : BooleanType {
public var boolValue : Bool {
return self != 0
}
}

你可以写

if SMLoginItemSetEnabled(launchDaemon, true) { ... }
  • BooleanLiteralConvertible 扩展允许自动转换Boolean 的第二个参数 true
  • BooleanType 扩展允许自动转换 Boolean将函数的值返回给 if 语句的 Bool

更新:从 Swift 2/Xcode 7 beta 5 开始,“历史 Mac 类型” bool 值被映射到 Swift 作为 Bool,这使得上面的扩展方法已过时。

关于objective-c - 类型 'Boolean' 不符合协议(protocol) 'BooleanType',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27304158/

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