Chr*_*alo 10 xcode objective-c swift osx-yosemite
在尝试根据Apple文档(和教程化)创建启动助手时,我似乎遇到了将Objective-C代码移植到Swift中导致的打嗝...谁的编译器在这方面不再多余案件.
import ServiceManagement
let launchDaemon: CFStringRef = "com.example.ApplicationLauncher"
if SMLoginItemSetEnabled(launchDaemon, true) // Error appears here
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
错误似乎一直是:
Type 'Boolean' does not conform to protocol 'BooleanType'
我曾尝试Bool
在很多地方进行投射,以防我只是处理冗余的,古老的原语(由Obj-C或Core Foundation引入),但无济于事.
为了以防万一,我尝试了回复:
SMLoginItemSetEnabled(launchDaemon, true) as Bool
产生错误:
'Boolean' is not convertible to 'Bool'
......当真?
Mar*_*n R 18
Boolean
是一个"历史性的Mac型"并宣称为
typealias Boolean = UInt8
Run Code Online (Sandbox Code Playgroud)
所以这个编译:
if SMLoginItemSetEnabled(launchDaemon, Boolean(1)) != 0 { ... }
Run Code Online (Sandbox Code Playgroud)
使用以下Boolean
类型的扩展方法(我不确定之前是否已发布,我现在无法找到它):
extension Boolean : BooleanLiteralConvertible {
public init(booleanLiteral value: Bool) {
self = value ? 1 : 0
}
}
extension Boolean : BooleanType {
public var boolValue : Bool {
return self != 0
}
}
Run Code Online (Sandbox Code Playgroud)
你可以写
if SMLoginItemSetEnabled(launchDaemon, true) { ... }
Run Code Online (Sandbox Code Playgroud)
BooleanLiteralConvertible
扩展允许第二个参数的自动转换true
到Boolean
.BooleanType
扩展允许的自动转换Boolean
的功能,返回值Bool
的if语句.更新:从Swift 2/Xcode 7 beta 5开始, "历史Mac类型" Boolean
被映射到Swift as Bool
,这使得上述扩展方法已经过时.
归档时间: |
|
查看次数: |
5263 次 |
最近记录: |