Swift5踩坑记

ps: 春光如梭,一年又已过去,xcode10丝滑的过度了4.2版本。以为苹果终于给力了。然而xcode10.2的升级,Swift5的更新让我明白了一个道理,xcode10.2才是那个点,xcode10说不定只是老板催的急,临时发的一个版。

闲话不多说,描述下这次遇到的问题吧。

HashValue 彻底不能用了

其实这个swift4.2就已经有了新的方案,只是前面一直还能用。swift5直接编译报错了。

下面就是替换方案的使用方法。

// swift 3
extension Point: Equatable{
    func ==(lhs: Testhash, rhs: Testhash) -> Bool {
        return lhs.hashValue == rhs.hashValue
    }
}
extension Point: Equatable {
    var hashValue: Int {
        get {
            return self.x + self.y * self.x
        }
    }
}

// swift 4.2
extension Point: Equatable {
    static func ==(lhs: Point, rhs: Point) -> Bool {
        // Ignore distanceFromOrigin for determining equality
        return lhs.x == rhs.x && lhs.y == rhs.y
    }
}
extension Point: Hashable {
    func hash(into hasher: inout Hasher) {
        // Ignore distanceFromOrigin for hashing
        hasher.combine(x)
        hasher.combine(y)
    }
}

大坑,release版本发布后TableView某些delegate无法触发生效

具体描述下场景, 当TableView所创建的类没有实现某些可以不实现的代理,比如didselect, heightforrow。然后这个类被子类继承,实现了didselect、heightforheader、heightforfooter的方法。在debug模式下,代码运行很正常,点击事件,高度都能正常显示。但是打包发布后,从testflight下载过来,就有可能存在点击,tableview行焦点色会变化,但是事件没法触发的问题。或者header和footer高度不对的问题。

这个问题的原因估计是编译优化做了修改导致的。

最无脑的解决方案是在父类把这几个方法都写一个空的实现,子类做函数重写。亲测有效。

高端解决办法,可能需要去修改一些编译选项吧,然而没测试过,有大佬搞过的也可以指导下。

此问题是Xcode10.2的锅,与swift版本无关。

你可能感兴趣的:(Swift5踩坑记)