C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了objective-c – 类型’Boolean’不符合协议’BooleanType’大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在尝试根据Apple文档(和 tutorial-ized)创建启动帮助程序时,我似乎正在打开将Objective-C代码移植到Swift中造成的打嗝,在这种情况下,编译器不能再多了.
import serviceManagement

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

if SMLoginItemSetEnabled(launchdaemon,truE) // Error appears here
{
    // ...
}

错误似乎一直是:

类型’Boolean’不符合协议’BooleanType’

如果我只是处理一个redundant,archaic primitive(由Obj-C或Core Foundation引入的),我已经尝试在多个地方投给Bool,无济于事.

为了防止这种情况,我已经尝试过响应:

SMLoginItemSetEnabled(启动Daemon,truE)为Bool

产生错误

Boolean’不能转换为’Bool’

……当真?

解决方法

布尔值是“历史Mac类型”,并声明为
typealias Boolean = UInt8

所以这样编译:

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

使用布尔类型的以下扩展方法
(我不知道这是否已经发布,我现在找不到):

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扩展允许自动转换
第二个参数为布尔值.
> BooleanType扩展允许自动转换布尔值
函数的返回值为Bool for if语句.

更新:从Swift 2 / Xcode 7 beta 5起,“历史Mac类型”布尔被映射到Swift作为Bool,这使得上面的扩展方法过时.

大佬总结

以上是大佬教程为你收集整理的objective-c – 类型’Boolean’不符合协议’BooleanType’全部内容,希望文章能够帮你解决objective-c – 类型’Boolean’不符合协议’BooleanType’所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。