以下代码编译错误:Error:(112, 20) type '(String, Int)' does not conform to protocol 'AnyObject'
func myMethode() {
aMethodeThatICanNotChange {
let a = ("John",7)
return a // Error:(112, 20) type '(String, Int)' does not conform to protocol 'AnyObject'
}
}
func aMethodeThatICanNotChange(closure: () -> AnyObject) {
// do something with closure
}
如何将元组转换/转换为AnyObject?
答案 0 :(得分:10)
您可以创建一个包装元组的类。
class TupleWrapper {
let tuple : (String, Int)
init(tuple : (String, Int)) {
self.tuple = tuple
}
}
然后你可以这样写:
func myMethod() {
aMethodeThatICanNotChange {
let a = ("John",7)
let myTupleWrapper = TupleWrapper(tuple: a)
return myTupleWrapper
}
}
或者,您可以创建一个可以接收任何Type
值的通用包装器。
class GenericWrapper<T> {
let element : T
init(element : T) {
self.element = element
}
}
希望这有帮助。
答案 1 :(得分:9)
如何将元组转换/转换为AnyObject?
简单地说,你不能。只能将类类型(或桥接到Foundation类类型的类型)强制转换为AnyObject。元组不是类类型。
当然,可能还有很多其他方法可以实现 尝试完成的任何事情。但至于你的特定的问题,你不能这样做。
答案 2 :(得分:1)
元组是一个有序的元素列表,因此您可以将其转换为符合Array
协议的AnyObject
func myMethode() {
aMethodeThatICanNotChange {
// let a = ("John",7)
let b = ["Joth", 7]
return b // No error
}
}
func aMethodeThatICanNotChange(closure: () -> AnyObject) {
// do something with closure
}