如何在Swift中将协议作为参数传递

 i92202502907823 发布于 2023-01-11 17:10

在Objective-C中,我知道如何传递protocolas参数:

- (void)MyMethod:(Protocol *)myparameter

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

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

1 个回答
  • 在你的一条评论中,你说:

    "我想创建一个方法,该方法返回一个实现所需协议的类类型数组."

    你尝试过类似的东西:

    //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",它将协议暴露给目标c运行时,并允许我们将任何"协议类型"作为参数传递.

    可能在将来的某个时候,我们将能够以"纯粹的"Swift方式做到这一点.

    2023-01-11 17:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有