Swift 同构与异构

本文探讨了Swift中的数据同构与异构,重点讲解如何使用协议构建异构数据,包括动态和静态方法。此外,还介绍了AnyObject和Any在处理异构数据中的角色以及它们与Objective-C的id类型的对比。建议使用协议实现异构数据以提高效率和安全性。
摘要由CSDN通过智能技术生成

1、数据源中的同构与异构

  • 对于 Swift 的集合数据来说,有同构和异构之分。

    • 如果你需要讨论一群鸟类或者一批飞机,那么这样的数据是同构的,比如包含鸟类的数组 [Bird] 和包含飞机的数组 [Airplane]
    • 有时候你想探讨的是这些空中家伙的共性 “飞翔”,因此你的数据源可能同时包含 BirdAirplane,这样的数据源叫做异构数据。

1.1 使用协议构建异构数据

  • 协议是描述一个事物属性的最小力度划分,Swift 协议的一个重要作用就是构建异构数据,数组的定义是泛型的,当你把协议作为类型去初始化一个数组的时候,实际是为数组中的成员的泛型定义增加了一层协议的约束。

  • 使用协议实现数据的异构除了功能划分更明确、粒度更小之外,还有一个好处是运行的效率要高于使用类的继承实现的数据异构。Swift 作为一门强类型语言,继承的安全性检查规则比较复杂,运行时的类型转换(特指父类与子类的转换)并不高,而协议不会保存数据,协议的实现只需要参考上下文,所以在运行速度上更胜一筹。使用协议实现异构,者也是苹果官方推荐的写法。

  • 使用协议构建异构数据

    // 创建协议
    
    protocol CanFly {
        func fly()
    }
    
    // 创建异构数据源类型
    
    struct Bird: CanFly {
    
        var name = ""
    
        func fly() {
            print("bird fly")
        }
    }
    
    struct Airplane: CanFly {
    
        var company = ""
    
        func fly() {
            print("airplane fly")
        }
    }
    // 创建异构的数组
    
    let flyArray: [CanFly] = [          // 指定数据上下文类型
    
        Bird(name: "maque"),
        Airplane(company: "zhongguodongfanghangkong")
    ]
    
    for f in flyArray {
        f.fly()                   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值