Edited at

[Swift 4.2] Dictionayでプロパティアクセス

Swift 4.2 で Dynamic member look up というものが導入されました。

これを使うことで Key が String の Dictionary で下のコードのようにプロパティを使うように要素にアクセスできるようになります。

var hoge = ["hoge": "hoge"]

print(hoge.hoge) // prints Optional("hoge")

print(hoge.piyo) // prints nil
hoge.piyo = "piyo"
print(hoge.piyo) // prints Optional("piyo")

まるでプロパティであるかのようですね!

以下ソース

@dynamicMemberLookup

protocol DynamicMemberLookupable {
associatedtype ReturnValue
}

extension DynamicMemberLookupable {
subscript(dynamicMember member: String) -> ReturnValue {
get { fatalError("oops!") }
set { fatalError("oops!") }
}
}

extension Dictionary: DynamicMemberLookupable where Key == String {
typealias ReturnValue = Value?
subscript(dynamicMember member: String) -> ReturnValue {
get { return self[member] }
set { self[member] = newValue }
}
}

皆さんもこれを使ってtypoに苦しんでください。