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è)字符串相等");
}
}