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版本无关。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,174评论 1 32
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型...
    龍飝阅读 2,247评论 0 12
  • 面向对象的三大特性:封装、继承、多态 OC内存管理 _strong 引用计数器来控制对象的生命周期。 _weak...
    运气不够技术凑阅读 1,167评论 0 10
  • 部门开始做一些交互设计专业方面的学习,形式采用的是,大家罗列出关于自己工作中遇到并且想要了解清楚的知识点,然后大家...
    阁主的叨叨阅读 1,552评论 3 16
  • 敬爱的李老师 智慧的马教授 亲爱的众学兄们大家晚上好,我是来自鑫山力机械的侯维山 今天是10.6我日精进第41天,...
    鑫山力智造阅读 175评论 0 1