カスタム演算子と関数を使用して流暢なようなAPIを作成したいと思います。ここでは私が探しているものの例です:カスタムオペレーターによる素早く流暢なAPIデザイン
var result = [Section]()
result +++= Section()
.appendTitle(title)
.appendPhotos(photos)
result +++= Section()
.appendSomething(sth)
.appendPhotos(photos)
.appendAnything()
return result
ことを行うために、私は2つのカスタム演算子を宣言した:
infix operator +++{ associativity left precedence 95 }
funC+++(lhs : [Section], rhs : Section) -> [Section] {
var result = lhs
result.append(rhs)
return result
}
infix operator +++= { associativity left precedence 95 }
funC+++=(inout lhs : [Section], rhs : Section) {
lhs = lhs +++ rhs
}
そしてもちろんSection
構造体のための適切な拡張子:
extension Section {
mutating func appendTitle(title: String?) -> Section {
guard let unwrappedTitle = title
else { return self }
...
return self
}
mutating func appendPhotos(photos: [Photo]?) -> Section {
...
}
...
}
...
ラインresult +++= Section()
だけが正しいですが、.append
を追加するとコンパイルされません。
最初のメッセージは次のとおりです。Passing value of type '[Section]' to an inout parameter requires explicit '&'
は、その後、私はresult
の前に&
を入れてみました(私はa += 1
のためにそれをやったことがない)2番目のメッセージがあります:Cannot use mutating member on immutable value: function call returns immutable value
だから、誰もができれば助けていただければ幸いです。
私はそれを見つけたスウィフト2.2とXcode 7
です参考にすることなく、言語の誤解を招くことがあります。とにかくありがとう、それはあなたの最初の答えであるので、私は誇らしげにそれを受け入れるでしょう、なぜなら、それは私よりもはっきりとしているからです。 ;) – Zaphod
@Zaphod、あなたは本当に良い点を作った。長年のOOPでは、機能的言語の見通しを見落とすのは非常に簡単です。 Swiftは関数型言語であり、すべてが不変性に関するものです。受け入れてくれてありがとう。 :) – Gurdeep