我有以下UINib扩展方法,我想知道我是否可以为unarchived视图设置委托
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
}
答案 0 :(得分:2)
如果你问Swift是否支持反射,TL; DR:你需要从NSObject
继承。否则你得到有限的信息。
在this question, Does Swift support reflection?中,您可以更详细地讨论您的可能性。
清除此部分后,可在此SO Answer
中找到有关如何获取属性列表的示例虽然快速&amp;脏的方式可能只是尝试访问属性(使用KVC)并在失败时捕获异常。 Swift 不支持Try / Catch / Finally构造,但是这个nice hack允许你编写如下代码:
SwiftTryCatch.try({
// try something
}, catch: { (error) in
println("\(error.description)")
}, finally: {
// close resources
})