美文网首页
Xocde升级,Swift升级以及swift 4.0(5.0)与

Xocde升级,Swift升级以及swift 4.0(5.0)与

作者: null_create | 来源:发表于2019-05-08 15:48 被阅读0次

    最近作为搬砖工的我 一直在忙别的事情,今天前端大佬找到我,说我把手机升级了,我以前一直拒绝升级手机,因为项目是oc与swift的混合,而xcode 一升级,swift 就相应升级了,结果这次升级了,结果一堆错,几乎就是swift的方法和属性,oc里面掉用不了。。。废话不多说


    Xocde升级,Swift升级问题

    错误:SWIFT_VERSION '3.0' is unsupported, supported versions are: 4.0, 4.2, 5.0. (in target 'MZMobstazinc')

    解决:项目->Build Settings->SwiftLanguage Version

    将3.0指向更高版本,这里我只指向了4.2


    然后修改相应的错误就可以了


    swift 4.0(5.0)与oc 混编问题

    oc与swift的正常混合使用的方式


    1,当我们在oc项目中添加swift文件的时候系统会默认帮我们创建一个桥头文件。“项目名称-Bridging-Header.m”的文件

    2,在Swift中调用oc的类时,只需要在上面桥接头文件import即可

    3,在OC中调用Swift类,则需要在OC文件中import"项目名称-Swift.h"头文件即可

    关于@objc坑


    1,在Swift3使用#selector指定的方法,只有当方法权限为为private时需要加@objc修饰符,现在Swift4.0后全部都要加@objc修饰符(当你已经正常按照混合方式的做法,但是在Swift4.0之后,OC依然无法调用Swift里面的方法和属性,那请在前面加上@objc)

    2,定义的方法,枚举,协议或者是属性如果需要被OC调用则需添加@objc

    3,自定义的protocol协议中,有optional修饰的非必须实现的方法,需要用@objc修饰

    被废弃的方法


    1,initailze/dispatch_once 方法已经被Swift4.0废弃所以后续不能再使用

    2,截取字符串substring(to: String.Index)、substring(from: String.Index)、substring(with:Range<String.Index>)、removeSubrange(bounds:Range<String.Index>)以及replaceSubrange(bounds:Range<String.Index>,with:Collection)已经被废弃,如何截取,以下是比较快的扩展累的方式:

        // 下标截取任意位置的便捷方法

       extension String {

        var length:Int{

       returnself.characters.count

            }

            subscript(i:Int) ->String{

                return self[i ..< i +1]

            }

            func substring(fromIndex:Int) ->String{

                return self[min(fromIndex, length) ..< length]

            }

            func substring(toIndex:Int) ->String{

                returnself[0..< max(0, toIndex)]

            }

            subscript(r:Range) ->String{

                let range =Range(uncheckedBounds: (lower: max(0, min(length, r.lowerBound)), upper: min(length, max(0, r.upperBound))))

                let start =index(startIndex, offsetBy: range.lowerBound) 

                let end =index(start, offsetBy: range.upperBound - range.lowerBound)

                return String(self[start ..< end])

            }

        }

        //不包含后几个字符串的方法

        extension String {

            func dropLast(_n:Int=1) ->String{

                return String(characters.dropLast(n))

            }

            var dropLast:String{

                return dropLast()

            }

        }

    Swift版本升级


    例如:Swift3.0->Swift4.0

    1,选中要转换的target

    2,Edit -> Convert -> To Current Swift Syntax

    3,勾选需要转换的target (pod 引用不用勾选),next

    4,选择转换选项

    推荐学习书籍


    基础内容 – Swift 编程语言

    相关文章

      网友评论

          本文标题:Xocde升级,Swift升级以及swift 4.0(5.0)与

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