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版本无关。
网友评论