Tencent / QMUI_iOS

QMUI iOS——致力于提高项目 UI 开发效率的解决方案
http://qmuiteam.com/ios
Other
7.08k stars 1.38k forks source link

连续2个 `!` #1224

Closed wuzhenli closed 3 years ago

wuzhenli commented 3 years ago

https://github.com/Tencent/QMUI_iOS/blob/0f4a3eb3365c2a43ca175e37bf2cff6703d1b074/QMUIKit/QMUIComponents/QMUITheme/UIColor%2BQMUITheme.m#L155

这里为什么要写2个 ! 呢?

codingiran commented 3 years ago

!!self.themeProvider == self.themeProvider != nil 不觉得!!更简洁么 😄

wuzhenli commented 3 years ago

直接写成下面这样岂不更简洁。不写成下面这样是有其他考虑吗?

- (BOOL)_isDynamic {
    return self.themeProvider;
}
codingiran commented 3 years ago

严格来说将id类型当作BOOL返回值是有问题的,只是在objective-c里,编译器会默认将

- (BOOL)_isDynamic {
    return self.themeProvider;
}

转为

- (BOOL)_isDynamic {
    return (BOOL)self.themeProvider;
}

而实际上将一个id对象转为BOOL,是将它的指针转为BOOL,当转换时,它将截断并且只占用指针的8个最低有效位并使其成为一个BOOL。如果这些位全部都为零,则相当于NO,反之为YES。

当然 self.themeProvider or (BOOL) self.themeProvider or !! self.themeProvider对代码正确性来说没有缺别,只是代码风格和严谨性的问题。

wuzhenli commented 3 years ago

明白了,多谢解答 👍