如何在 Swift 中将 Tuple 转换为 AnyObject
How to convert Tuple to AnyObject in Swift
以下代码编译错误: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
}
如何 cast/convert 元组到 AnyObject?
元组是有序的元素列表,因此您可以将其转换为符合 AnyObject
协议的 Array
func myMethode() {
aMethodeThatICanNotChange {
// let a = ("John",7)
let b = ["Joth", 7]
return b // No error
}
}
func aMethodeThatICanNotChange(closure: () -> AnyObject) {
// do something with closure
}
How can I cast/convert a Tuple to AnyObject?
简单地说,你不能。只有 class 类型(或桥接到 Foundation class 类型的类型)可以转换为 AnyObject。元组不是 class 类型。
当然,可能还有许多其他方法可以完成您真正想要完成的任何事情。但是至于你特别的问题,你做不到。
这只是一种解决方法。
您可以创建一个 class 来包装您的元组。
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
}
}
希望对您有所帮助。
以下代码编译错误: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
}
如何 cast/convert 元组到 AnyObject?
元组是有序的元素列表,因此您可以将其转换为符合 AnyObject
协议的 Array
func myMethode() {
aMethodeThatICanNotChange {
// let a = ("John",7)
let b = ["Joth", 7]
return b // No error
}
}
func aMethodeThatICanNotChange(closure: () -> AnyObject) {
// do something with closure
}
How can I cast/convert a Tuple to AnyObject?
简单地说,你不能。只有 class 类型(或桥接到 Foundation class 类型的类型)可以转换为 AnyObject。元组不是 class 类型。
当然,可能还有许多其他方法可以完成您真正想要完成的任何事情。但是至于你特别的问题,你做不到。
这只是一种解决方法。
您可以创建一个 class 来包装您的元组。
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
}
}
希望对您有所帮助。