iOS 对象的内聚写法

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(&copy)
      return copy
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容