当前位置:  开发笔记 > IOS > 正文

Swift的异构值类型数组如何工作?

如何解决《Swift的异构值类型数组如何工作?》经验,为你挑选了0个好方法。

我是一名刚开始使用Swift的C++程序员.我观看了Dave Abrahams的WWCD演讲"Swift中的协议定向编程",我对可以创建受协议约束的异构数组类型的方式感到好奇.

要使用视频中的示例,给定一个协议Drawable和两个实现它的结构:

protocol Drawable {
    func draw(renderer: Renderer) // Renderer is another protocol
}

struct Circle : Drawable {
    func draw(renderer: Renderer) {
        // Implementation
    }
}

struct Rectangle : Drawable {
    func draw(renderer: Renderer) {
        // Implementation
    }
}

可以将a定义Diagram为包含Drawables 数组

struct Diagram : Drawable {
    var elements: [Drawable] = []

    func draw(renderer: Renderer) {
        for e in elements {
            e.draw(renderer);
        }
    }
}

我的问题是,这个异构elements数组究竟是如何在封面下工作的?由于各种实现的Drawable大小可能不同,我无法看到它们如何在内存中的高效数组中布局.这是否意味着这样的"协议数组"实际上是在表面下使用每元素堆分配和动态/虚函数调用?

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有