Swift 声明数组

场景:声明一个数组中包含多种类型的实例,并且这些类型都遵循相同的(一个或多个)协议。
Ans:这种情况声明数组的类型可以用协议名称,多个协议之间用&符号连接。意思是只要遵守这些协议的实例都可以放在这个数组中。

1. 首先,定义两个协议:
protocol ProtocolA {  
    func doSomethingA()  
}  
protocol ProtocolB {  
    func doSomethingB()  
}

2. 然后,创建符合这两个协议的不同类型:
class ClassA: ProtocolA, ProtocolB {  
    func doSomethingA() {  
        print("Class A doing something A")  
    }  
    func doSomethingB() {  
        print("Class A doing something B")  
    }  
}    

class ClassB: ProtocolA, ProtocolB {  
    func doSomethingA() {  
        print("Class B doing something A")  
    }  
    func doSomethingB() {  
        print("Class B doing something B")  
    }  
}

struct StructC: ProtocolA, ProtocolB {  
    func doSomethingA() {  
        print("Struct C doing something A")  
    }  
    func doSomethingB() {  
        print("Struct C doing something B")  
    }  
}

3. 最后,声明并初始化一个数组,其元素类型遵守 ProtocolA 和 ProtocolB:
let mixedArray: [ProtocolA & ProtocolB] = [ClassA(), ClassB(), StructC()]  

4. 遍历数组并执行两个协议中的方法
for item in mixedArray { 
    item.doSomethingA()
    item.doSomethingB()
}

注意:这里如果使用AnyObject替代具体的协议名称虽然也不会报错,但是在写代码的时候尽量要明确数组中的实例类型或实例遵守的协议

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容