Swift无法从Swift.X转换为Swift.X.Type
我是Swift的新手,可能我没有经验了解Swift中的铸造工作原理,但我希望您能帮助我:Swift无法从Swift.X转换为Swift.X.Type,swift,xcode,Swift,Xcode,我是Swift的新手,可能我没有经验了解Swift中的铸造工作原理,但我希望您能帮助我: let x:Int32 = db.valueByKey(key: ["integer_tgc":Int32.self]).AtIndexT(index: [2:Int32.self]); AtIndex是一个扩展,如下所示: extension Array { func AtIndex(index: Int) -> Any { retu
let x:Int32 = db.valueByKey(key: ["integer_tgc":Int32.self]).AtIndexT(index: [2:Int32.self]);
AtIndex是一个扩展,如下所示:
extension Array {
func AtIndex(index: Int) -> Any {
return self[index];
}
func AtIndexT<T>(index: KeyValuePairs<Int,T>) -> T? {
if let _record = index.first {
let _key : T = self[_record.key] as! T;
return _key;
} else {
return nil;
}
}
}
你得到的错误 对于上面的示例,编译器给出了“无法将“Int32.type”类型的值转换为指定的类型“Int32” 这是因为您正在将
KeyValuePairs
中的Int32.self
作为T
作为参数传递给函数,因此返回类型T?
本身将变为Int32.type?
。因此,当您试图将其分配给Int32
类型的x
时,编译器将抛出一个错误,因为强制转换将失败
因此,要解决此问题,您可以选择以下代码:
阵列扩展:
extension Array {
func AtIndex(index: Int) -> Any {
return self[index];
}
func AtIndexT<T>(index: KeyValuePairs<Int, T.Type>) -> T? {
if let _record = index.first {
let _key : T = self[_record.key] as! T;
return _key;
} else {
return nil;
}
}
}
注意:
x
是可选的Int32
类型。Thx!这就是诀窍!很高兴知道这有帮助!
extension Array {
func AtIndex(index: Int) -> Any {
return self[index];
}
func AtIndexT<T>(index: KeyValuePairs<Int, T.Type>) -> T? {
if let _record = index.first {
let _key : T = self[_record.key] as! T;
return _key;
} else {
return nil;
}
}
}
let x:Int32? = Int(db.valueByKey(key:["integer_tgc":Int32.self]).AtIndexT(index: [2:Int32.self]))