2015-04-06 6 views
1

У меня есть ниже метод расширения UINib, мне было интересно, если я могу установить делегат для Разархивирован зрениябыстра проверка собственности существование объекта

public class func decodeView<T:UIView>(nibName name:String,className classType:T.Type,delegate:AnyObject) -> T { 

    let nib = UINib(nibName: name) 
    let topLevelObjects = nib.instantiateWithOwner(nil, options: nil) 
    let view = topLevelObjects[0] as T 
    view.setTranslatesAutoresizingMaskIntoConstraints(false) 
    //check if view.delegate exists then view.delegate = delegate 
    return view 
} 

ответ

2

Если вы спрашиваете, если Swift поддерживает отражение, TL; DR : вам нужно подкласс от NSObject. Кроме того, вы получаете ограниченную информацию.

В this question, Does Swift support reflection? вы получите более подробное обсуждение возможностей, которые у вас есть.

После того, как вы это часть освободилась, пример того, как получить список свойств можно найти в этом SO Answer

Хотя быстрый & грязный способ может быть просто, чтобы попытаться получить доступ к собственности (с помощью KVC) и поймать исключение, если оно не выполнено. Swift не поддерживает Try/Стопор/Наконец конструкции, но это nice hack позволяет писать код, как:

SwiftTryCatch.try({ 
     // try something 
    }, catch: { (error) in 
     println("\(error.description)") 
    }, finally: { 
     // close resources 
}) 
Смежные вопросы