美文网首页
WWDC 学习笔记 Embracing Algorithms

WWDC 学习笔记 Embracing Algorithms

作者: partrick | 来源:发表于2018-06-14 23:28 被阅读0次

Embracing Algorithm

wwdc2018
session

  • Dave Abrahams

Dave and Crusty

这位老兄每次都要装作自己很无知的样子。Crusty 就是哪位指点迷津的扫地僧。
于是我们的 Dave 又遇到问题了。

Delete Selection

这位老兄对图形情有独钟,每次都拿形状举例子。这次做了个各种形状层叠的App。

第一段代码功能很简单,从图形数组中,删除选中的形状。

embalg01.png
extension Canvas {
    mutating func deleteSelection() {
        for i in 0..<shapes.count {
            if shapes[i].isSelected {
                shapes.remove(at: i)
            }
        }
    }
}

这段代码的问题是,要删除的图形如果不是数组的最后一个元素,i 执行到 count - 1 时,数据就会越界。

于是,Dave 将代码修改如下:

extension Canvas {
    mutating� func deleteSelection() {
        var i = 0
        while i < shapes.count {
            if shapes[i].isSelected {
                shapes.remove(at: i)
            }
            i += 1
        }
    }
}
whilebug.png

这段代码也有 bug,如果两个要删的元素(绿色块)连在一起,第二个绿会,会被忽略。

于是要在 if 后面避免这种情况,如下:

extension Canvas {
    mutating� func deleteSelection() {
        var i = 0
        while i < shapes.count {
            if shapes[i].isSelected {
                shapes.remove(at: i)
            } else {
                i += 1
            }
        }
    }
}

写一个看似简单的功能,也有挺大的认知负担。

相关文章

网友评论

      本文标题:WWDC 学习笔记 Embracing Algorithms

      本文链接:https://www.haomeiwen.com/subject/xvgueftx.html