sty*_*972 3 generics ios swift
尝试在Swift中使用Generics时收到错误消息.我试图创建一个函数,它从继承的任何对象Parent,并修改inout它恰好是一个参考Array的T: Parent
func myFunction<T: Parent>(data: NSDictionary, inout objects: Array<T>) {
let myArray = data.valueForKey("the_array") as NSArray
for object in myArray {
var addMe: Object = Object()
//...
objects.append(addMe) //'Object' is not convertible to 'T'
}
}
Run Code Online (Sandbox Code Playgroud)
我将它传递到堆栈上方的函数中.
var objects: [Object] = []
myClass.myFunction(data, objects: &objects)
Run Code Online (Sandbox Code Playgroud)
即使Object定义如下,继承自Parent
class Object: Parent {
//...
}
Run Code Online (Sandbox Code Playgroud)
它给了我一个错误,它无法转换Object为T..虽然我可能错误地解释了错误消息.有谁看到我做错了什么?
你正在尝试添加Object一个数组T : Parent.但是,仅仅因为Object是的一个子类Parent,并不意味着T是Object.在运行时,T可能是Dinosaur,另一个子类Parent,并添加addMe到该数组将是无效的.
一种解决方案是初始化addMe为T(),并且可选地强制转换为Object,如下所示:
for object in myArray {
var addMe = T()
if let addMe = addMe as? Object {
// do Objecty stuff here
}
//...
objects.append(addMe)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1888 次 |
| 最近记录: |