關於Smart KeyPath - Chiao-Te, Ni === {%hackmd FGRWt1UuTFKk0wSbGgg-SA %} > 請從這裡開始 ## Slide {%speakerdeck chiaoteni/swift-smart-keypath %} * 範例: let keyPath = \UIView.frame * 延後取值的特性 * 也可以用在非NSObject * KeyPath -> read only * WritableKeyPath -> read/write (for variable) * ReferenceWritableKeyPath -> read/write (for variable/constant, Class only) * 系統會根據屬性(如frame 或是 width) 自動回傳不同的keyPath型別 * e.g. \UIView.frame.size -> ReferenceWritableKeyPath * e.g. \UIView.frame.width -> KeyPath * 實際應用範例:對array做extension 驗證物件得值是否符合預期 ``` ticket.sorted(\.price, by: <) ``` ## second case hold check array ## Fluent autoLayout coding syle: Fluent interface ### before ```swift label.translatesAutoresizingMaskIntoConstraints = false label.constraint(...).isactive = true ``` ### after ```swift label .setAnchor(\.widthanchor, ..., to: view.widthanchor) .setAnchor(\.heightanchor, ..., to: view.heightanchor) ``` Fluent Builder `@dynamicMemberLookup` ```java //java Type variableName = new Type.builder() .a() -> return builder .b() -> return builder .build() -> 這邊才把實體new出來 ``` ## conclusion ###### tags:`iPlayground2019`