我正在尝试克服here解释的限制,因为我无法将IB elements
直接连接到protocol types
的商店。
提到的解决方法并不理想,因为我需要一个Outlet Collection
并连接一个新元素意味着一次又一次地重做这个,这就违背了我项目这一部分的目的。
所以我想我会创建一个中间控制器,其唯一目的是将AnyObject
插座集合轻松转换为使用Protocol
键入的数组。
我发现您在下面看到的数组转换会引发错误:“Type FormField
”不符合协议“AnyObject
”
但是,简单的每项循环注释实际上有效。
我想理解为什么前者失败了,如果有办法真正避免每个项目循环。
class FormViewController: UIViewController, Form {
@IBOutlet var fieldCollection: [AnyObject]!
var formFields: [FormField]!
override func viewDidLoad() {
super.viewDidLoad()
self.formFields = self.fieldCollection as! [FormField]!
/*
self.formFields = [FormField]()
for field in self.fieldCollection {
self.formFields.append(field as! FormField)
}*/
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
答案 0 :(得分:0)
您没有说明如何定义FormField协议,但我猜测它没有将AnyObject类作为约束。
例如:protocol FormField:class,AnyObject {}
如果确实如此,那么类型转换就可以了。
然后您可以将其声明为:
class FormViewController: UIViewController, Form {
@IBOutlet var fieldCollection: [AnyObject]!
var formFields: [FormField] { return fieldCollection as! [FormField] }
我相信你可以这样做(在Swift 2.1中):
@IBOutlet var fieldCollection: [FormField]!