0
私は、すべてのパラメータが設定されているかどうかを判断できるデフォルトの拡張子を持つ小さなプロトコルを書きます。 (Swift 2.2)子が無しであるかどうかを判断する方法
私の考えは、Mirror型を使用して、指定された型のすべての子要素を取得し、反復処理することでした。このように:
typealias Child = (label: String?, value: Any)
それがnilであれば、それはオプションではありませんので、だから私はただ、チェックすることはできません。
var isComplete: Bool {
get {
return Mirror(reflecting: self).children.reduce(true) { return $0 && $1.value != nil } // <- Error, because value is not Optional
}
}
問題がある、子供のタイプです。もし使用しているのがprint($1.value)
なら、それはnilを出力するので、その背後にポインタマジックがあるはずです。
どのようにそのメモリアドレスを確認する方法。それとも、いくつかの簡単な方法は、
何(1)この程度?それはポインタに関するいくつかの情報を与えるかもしれませんが、それは確かにハッキーでなければなりません。 (1)http://swiftdoc.org/v2.2/func/unsafeAddressOf/#func-unsafeaddressof_-anyobject – Mrwerdo
確かに残念ながら、このパラメータはAnyObjectである必要があります。AnyはAnyしか持っていないので、イベントは機能しません と 'もしlet someObject = $ 1.valueとして? AnyObject { let somePointer = unsafeAddressOf(someObject) } ' のほとんどのプロパティは値型です。 – gujci