Я собираюсь написать небольшой протокол с расширением по умолчанию, который может решить, установлены ли все параметры. (Swift 2.2)Как решить, является ли ребенок нулевым или нет
Моя идея состояла в том, чтобы использовать тип Mirror и получить все дочерние элементы заданного типа, а не перебирать их. Как это:
var isComplete: Bool {
get {
return Mirror(reflecting: self).children.reduce(true) { return $0 && $1.value != nil } // <- Error, because value is not Optional
}
}
Проблема заключается в типе ребенка, который:
typealias Child = (label: String?, value: Any)
Так я не могу просто проверить, если она равна нулю, так как он не является факультативным. Если используется print($1.value)
, он печатает нуль, поэтому за этим должна быть указательная магия.
Любые идеи, как проверить адрес памяти этого. Или, возможно, некоторые более простой способ реализовать эту функциональность
Что об этом (1)? Это может дать вам некоторую информацию о указателе, но это наверняка получило хакерство. (1) http://swiftdoc.org/v2.2/func/unsafeAddressOf/#func-unsafeaddressof_-anyobject – Mrwerdo
Конечно, но, к сожалению, для этого требуется, чтобы его параметр был AnyObject, у меня есть только Any, поэтому он не будет работать. с 'if let someObject = $ 1.value как? AnyObject { let somePointer = unsafeAddressOf (someObject) } ' вызывает большинство свойств - типы значений. – gujci