2014-08-29 65 views
4

有没有简单的方法来做到这一点,我失踪了?现在我做这个,像这样:干净地转换一个Objective-C布尔到Swift布尔?

let doesConformNumber: NSNumber = NSNumber(unsignedChar: UTTypeConformsTo(utiCF, typeCF)) 
if doesConformNumber.boolValue { 
    return true 
} 

如果我试图做一个简单的铸像这样:

let testBool: Bool = UTTypeConformsTo(utiCF, typeCF) 

我得到的错误“布尔”是无法转换为“布尔”

任何人都有更干净的方式做这种转换?

+3

'让testBool = doesConformNumber.boolValue'还不够吗? – 2014-08-29 03:06:40

+0

检查的答案是更清晰的,这是我想要的 – arcticmatt 2014-08-29 15:56:41

+0

请注意,UTTypeConformsTo返回一个CoreFoundation布尔值,布尔值;一个Objective-C布尔值是一个'BOOL'。这个问题很好,总结只是有点误导。但可能对于搜索很有帮助。 :) – 2015-03-30 20:07:14

回答

5

UTTypeConformsTo()返回Boolean,这是Int8一个类型别名,而不是直接 转换为Bool。最简单的方法是

let testBool : Bool = UTTypeConformsTo(utiCF, typeCF) != 0 

其中类型注释实际上是没有必要的:

let testBool = UTTypeConformsTo(utiCF, typeCF) != 0 
+0

布尔和布尔之间有什么区别? – 2015-04-24 08:51:45

+0

@jawanam:'Boolean'是一个“历史悠久的Mac类型”,并定义为“Int8”。 'Bool'是Swift布尔类型。比较http://stackoverflow.com/questions/27304158/type-boolean-does-not-conform-to-protocol-booleantype。 – 2015-04-24 08:56:41

+0

因此,只要有可能,它应该使用布尔布尔布尔? – 2015-04-25 03:39:38