Xocde升级,Swift升级以及swift 4.0(5.0)与oc 混编问题

最近作为搬砖工的我 一直在忙别的事情,今天前端大佬找到我,说我把手机升级了,我以前一直拒绝升级手机,因为项目是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)、removeSubrange(bounds:Range)以及replaceSubrange(bounds:Range,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)与oc 混编问题)