*Bool可以強(qiáng)轉(zhuǎn)成NSNumber,怎么區(qū)分二者

private let trueNumber = NSNumber(bool: true)
private let falseNumber = NSNumber(bool: false)
private let trueObjCType = String.fromCString(trueNumber.objCType)
private let falseObjCType = String.fromCString(falseNumber.objCType)

extension NSNumber {
    var isBool: Bool {
        get {
            let objCType = String.fromCString(self.objCType)
            if (self.compare(trueNumber) == NSComparisonResult.OrderedSame && objCType == trueObjCType)
                || (self.compare(falseNumber) == NSComparisonResult.OrderedSame && objCType == falseObjCType){
                return true
            } else {
                return false
            }
        }
    }
}

代碼來(lái)自于SwiftyJSON
可見(jiàn)每一個(gè)NSNumber(繼承自NSValue)都有一個(gè)objCType屬性,標(biāo)明其Objective-C數(shù)據(jù)類型。OC中可以用@encode編譯器命令。具有同樣效果。SwiftyJSON中寫得這么啰嗦一定是為了可讀性。

- (void)someMethod {
    char *intCharArray = @encode(int);
    char *boolCharArray = @encode(BOOL);
    if (strcmp(intCharArray, boolCharArray) == 0) {
        NSLog(@"兩個(gè)字符串相等");
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容