gpt4 book ai didi

protocols - 如何在 Swift 中将协议(protocol)作为参数传递

转载 作者:IT王子 更新时间:2023-10-29 05:15:57 27 4
gpt4 key购买 nike

在 Objective-C 中,我知道如何将 protocol 作为参数传递:

- (void)MyMethod:(Protocol *)myparameter

但是在 Swift 中没有更多的 Protocol 类型。

如何在不知道哪个是协议(protocol)的情况下将协议(protocol)作为参数传递?

最佳答案

在您的一条评论中,您说:

“我想创建一个方法,该方法返回一个实现所需协议(protocol)的类类型的数组。”

您是否尝试过类似以下的方法:

//notice the use of @objc here
@objc protocol AlertProtocol
{
func getMyName()->String
}

class Class1 : AlertProtocol
{
let name = "Object 1"
func getMyName() -> String
{
return name
}
}

class Class2 : AlertProtocol
{
let name = "Object 2"
func getMyName() -> String
{
return name
}
}

//borrowing from and refactoring siLo's answer
func classesConformingToProtocol(proto:Protocol) -> [AnyClass]
{
let availableClasses : [AnyClass] = [ Class1.self, Class2.self ]

var conformingClasses = Array<AnyClass>()

for myClass : AnyClass in availableClasses
{
if myClass.conforms(to: proto)
{
conformingClasses.append(myClass)
}
}

return conformingClasses
}

然后像这样使用上面的结构:

let classes = classesConformingToProtocol(AlertProtocol.self)

完成这项工作的棘手部分是“@objc”,它将协议(protocol)暴露给 objective-c 运行时并允许我们将任何“协议(protocol)类型”作为参数传递。

也许在未来的某个时候,我们将能够以一种“纯粹的”Swift 方式做到这一点。

关于protocols - 如何在 Swift 中将协议(protocol)作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24041258/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com