如何在 Swift 中将类型作为参数传递
How to pass a Type as a parameter in Swift
我有一个对象字典,我想做的是遍历数据集和 return 符合给定协议的对象数组。我在传递所需协议的语法方面遇到问题:
func getObjectsThatConformTo<T>(conformance: T.Type) -> [AnyClass]{
var returnArray: [AnyClass] = []
for(myKey, myValue) in allCreatedObjects{
if let conformantObject = myValue as? conformance{
returnArray.append(conformantObject)
}
return returnArray
}
我看到的错误是 'conformance' 不是类型
感谢您的帮助和时间
虽然您可以编写一个泛型方法来过滤数组并查看数组中的哪些内容是给定类型,但这个问题需要使用 filter
。
示例:
var dict: [String: AnyObject] = [:]
// Populate dict with some values
let strings = dict.values.filter { return [=10=] is String }
包装在接受类型的函数中:
func getObjectsThatConformTo<T>(array: [Any], conformance: T.Type) -> [T]? {
return array.filter { return [=11=] is T } as? [T]
}
说明:
Filter 是 Array 上的一种方法,它 returns 基于测试的数组子集。在这种情况下,我们的测试是 'is the element a String?' filter 方法接受一个带有一个参数的闭包,即要测试的元素,上面用 $0 引用。
在此处阅读过滤器:https://www.weheartswift.com/higher-order-functions-map-filter-reduce-and-more/
我认为这应该有效:
func getObjectsThatConformToType<T>(type:T.Type) -> [T]{
var returnArray: [T] = []
for(myKey, myValue) in allCreatedObjects{
if let comformantModule = myValue as? T {
returnArray.append(comformantModule)
}
}
return returnArray
}
我有一个对象字典,我想做的是遍历数据集和 return 符合给定协议的对象数组。我在传递所需协议的语法方面遇到问题:
func getObjectsThatConformTo<T>(conformance: T.Type) -> [AnyClass]{
var returnArray: [AnyClass] = []
for(myKey, myValue) in allCreatedObjects{
if let conformantObject = myValue as? conformance{
returnArray.append(conformantObject)
}
return returnArray
}
我看到的错误是 'conformance' 不是类型
感谢您的帮助和时间
虽然您可以编写一个泛型方法来过滤数组并查看数组中的哪些内容是给定类型,但这个问题需要使用 filter
。
示例:
var dict: [String: AnyObject] = [:]
// Populate dict with some values
let strings = dict.values.filter { return [=10=] is String }
包装在接受类型的函数中:
func getObjectsThatConformTo<T>(array: [Any], conformance: T.Type) -> [T]? {
return array.filter { return [=11=] is T } as? [T]
}
说明: Filter 是 Array 上的一种方法,它 returns 基于测试的数组子集。在这种情况下,我们的测试是 'is the element a String?' filter 方法接受一个带有一个参数的闭包,即要测试的元素,上面用 $0 引用。
在此处阅读过滤器:https://www.weheartswift.com/higher-order-functions-map-filter-reduce-and-more/
我认为这应该有效:
func getObjectsThatConformToType<T>(type:T.Type) -> [T]{
var returnArray: [T] = []
for(myKey, myValue) in allCreatedObjects{
if let comformantModule = myValue as? T {
returnArray.append(comformantModule)
}
}
return returnArray
}