2014-08-29 83 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