*Bool可以强转成NSNumber,怎么区分二者

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
            }
        }
    }
}

代码来自于SwiftyJSON
可见每一个NSNumber(继承自NSValue)都有一个objCType属性,标明其Objective-C数据类型。OC中可以用@encode编译器命令。具有同样效果。SwiftyJSON中写得这么啰嗦一定是为了可读性。

- (void)someMethod {
    char *intCharArray = @encode(int);
    char *boolCharArray = @encode(BOOL);
    if (strcmp(intCharArray, boolCharArray) == 0) {
        NSLog(@"两个字符串相等");
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容