iOS 对象的内聚写法
2021-12-22 本文已影响0人
一粒咸瓜子
OC 写法
UIButton *button = ({
UIButton *btn = UIButton.new;
btn;
});
这种{()}
的用法严格上讲和OC没什么太大的关系,这个是GNU C的对C的扩展语法 Xcode采用的Clang编译,Clang作为GCC的替代品,和GCC一样对于GNU C语法完全支持。
你可能知道if(condition)
后面只能根一条语句,多条语句必须用{}
阔起来,这个语法扩展即将一条(多条要用到{}
)语句外面加一个括号()
, 这样的话你就可以在表达式中应用循环、判断甚至本地变量等。表达式()最后一行这个子表达式作为整个结构的返回结果。
这个扩展在代码中最常见的用处在于宏定义中。
Swift 写法
参考 Then
extension Chainable where Self: Any {
/// Makes it available to set properties with closures just after initializing and copying the value types.
///
/// let frame = CGRect().with {
/// $0.origin.x = 10
/// $0.size.width = 100
/// }
///
/// UserDefaults.standard.with {
/// $0.set("fresh", forKey: "bundle")
/// $0.synchronize()
/// }
@inlinable
@discardableResult public func with(_ block: (inout Self) throws -> Void) rethrows -> Self {
var copy = self
try block(©)
return copy
}
}