从0到1学习iOSSwift基础

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(&copy)
      return copy
    }
}
上一篇 下一篇

猜你喜欢

热点阅读