Swift5踩坑记

作者: Wesin | 来源:发表于2019-04-09 14:55 被阅读433次

    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踩坑记

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