4.0语法变化 swift_swift4.0语法迁移软件 - CSDN
精华内容
参与话题
  • 使用 Swift 语言编程的优缺点

    万次阅读 2017-10-20 23:15:27
    我们的 Swift 项目上线已经有一段时间了。结合目前 Swift 的使用情况,总结下其与 Objective-C 相比的优缺点。总的来说,我认为使用 Swift 来作为编程语言的优点还是要远远大于缺点的,而且很多缺点苹果也在逐渐改善...

    我们的 Swift 项目上线已经有一段时间了。结合目前 Swift 的使用情况,总结下其与 Objective-C 相比的优缺点。

    总的来说,我认为使用 Swift 来作为编程语言的优点还是要远远大于缺点的,而且很多缺点苹果也在逐渐改善。

    • 优点

      • 简洁的语法

      • 更强的类型安全

      • 函数式编程的支持

        Swift 语言本身提供了对函数式编程的支持。
        Objc 本身是不支持的,但是可以通过引入 ReactiveCocoa 这个库来支持函数式编程。

      • 编写 OS X 下的自动化脚本

    • 缺点

      • App体积变大

        使用 Swift 后, App 体积大概增加 5-8 M 左右,对体积大小敏感的慎用。

        体积变大的原因是因为 Swift 还在变化,所以 Apple 没有在 iOS 系统里放入 Swift 的运行库,反而是每个 App 里都要包含其对应的 Swift 运行库。

      • Xcode 支持不够好

        如果你是使用 Xcode经常卡住或者崩溃想必你是肯定碰到过了,这个是目前使用 Swift 最让人头疼的事情,即使是到现在XCode 9, 有时候也会遇到这种问题,所以要看你的承受力了……

      • 第三方库的支持不够多

        目前确实 Swift 编写的第三方库确实不多,但可以通过桥接的方式来使用 Objc 的三方库,基本上没有太大问题。现在已经改善很多了…

      • 语言版本更新带来的编译问题

        Swift 语言本身还在发展,所以每次版本更新后都会出现编译不过的情况(至少到目前为止还是),但是自从 4.0 版本发布后,改动没有 beta 时候那么大了,而且根据 Xcode 提示基本就可以解决语法变动导致的编译问题了。

    展开全文
  • Swift2.3 --> Swift3.0 的变化

    千次阅读 2016-10-15 09:45:08
    Swift3.0语法变化写在前面首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax… 让Xcode帮我们把Swift2.3的代码转换为Swift3.0。 手动调出Xcode...

    Swift3.0语法变化

    写在前面

    首先和大家分享一下学习新语法的技巧:
    用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax… 让Xcode帮我们把Swift2.3的代码转换为Swift3.0。

    这里写图片描述
    手动调出Xcode自动转换Swift2.3 到 Swift3.0

    弹出语言版本选择界面,选择Covert to Swift3,Next:
    这里写图片描述

    进入选择模块界面:
    这里写图片描述
    选择模块界面

    建议只选择自己创建的模块,第三方框架的模块最好不要使用Xcode来转换,等待第三方作者更新。

    进入转换界面:
    这里写图片描述
    转换界面
    不要着急Save,在这个界面中详细的列出了各个语法具体变化,我们可以利用这个界面来快速学习自己项目中遇到语法变化。

    好了,下面给大家分享一下我的遇到的语法变化。

    常用类及方法的Swfit风格化

    UIColor

    将常用的标准颜色写成了只读属性,不再是方法,调用方法改变。
    这里写图片描述

    Swift 2.3 UIColor

    这里写图片描述

    Swift 3.0 UIColor

    这里写图片描述

    Swift 3.0 和 Swift 2.0 写法对比

    Any和AnyObject

    这两个类型都是Swift中很早就出现的类型,但是我们经常使用AnyObject,很少使用Any。
    AnyObject类似于OC中的id类型,表示任意的class的实例对象,但是在Swift中,例如我们常见的String和Array都变为结构体了,而且在Swift3.0中,更多的类型或者枚举被写为结构体了,AnyObject的适用范围变相被削弱了,所以在Swift3.0的API中曾经许多AnyOjbect的类型被替换为Any了。
    当然,这对于我们使用这些API没有影响,但是在我们自己定义方法时,如果需要用到AnyObject,就需要认真考虑一下该用AnyObject还是Any了。
    这里写图片描述

    Swift 3.0 和 Swift 2.0 写法对比

    BOOL属性的命名规则

    在OC中,官方建议我们将BOOL属性的getter方法命名为isXXX,Swift中由于只是将原有OCUIKit框架进行Swift转换,所以这个规则在之前是Swift中并没有体现。在Swift3.0中,这个规则被再次应用,所有的BOOL类型都重新命名为isXXX,所以以后我们的自定义类中BOOL属性的命名也应体现这个规则。
    这里写图片描述

    布尔类型的属性get方法改变

    Foundation框架部分类名去掉NS前缀

    包括:UserDefaults、URL、NotificationCenter、Bundle、Timer、Thread、RunLoop
    这里写图片描述

    Swift 3.0 和 Swift 2.3 写法对比

    常用系统提供单例类的获取方法Swift风格化

    这里写图片描述
    Swift 3.0 和 Swift 2.3 写法对比

    常用结构体的构造方法改变

    常用的结构体有:CGSize、CGPoint和CGRect。
    这里写图片描述

    Swift 3.0 和 Swift 2.3 写法对比

    Swift2.3中,使用构造方法和make函数都可以创建;

    // Make函数创建
    let _ = CGSizeMake(10, 20)
    // 构造方法创建
    let _ = CGSize(width: 10, height: 20)
    Swift3.0中,废弃make函数,只能使用构造方法创建。

    // 只能使用构造方法创建
    let _ = CGSize(width: 10, height: 20)

    转变为结构体的类

    在之前的Swift版本中,苹果引入了String、Array和Dictionary这三个结构体来代替OC中的NSString、NSArray和NSDictionary这三个类,当然这三个OC类依然可以使用。但是在平时的开发使用中,Swift的这三个结构体使用起来更方便,大部分情况下效率更高。
    在Swift3.0中,苹果又推出了以下新的结构体,原有OC类依然可以使用。并且可以相互转化。
    这里写图片描述
    新增结构体类型及对应的OC类型

    通知的变化

    这里写图片描述

    Swift 3.0 和 Swift 2.3 写法对比

    Swift 3.0 中NSNotification和Notification创建时,通知的name参数类型都变为“Notification.Name”类型,该类型创建比较复杂。

    // Swift3.0中的通知
    let _ = NSNotification(name: NSNotification.Name(rawValue: “name”), object: nil)
    let _ = Notification(name: NSNotification.Name(rawValue: “name”))

    UIViewController 返回是否显示状态栏的方法变化

    这里写图片描述
    控制器方法改为属性

    获取string的字符串长度方法的改变

    这里写图片描述
    获取字符串长度参数改变

    获取沙盒指定文件夹路径的方法变化

    获取文件路径统一交给FileManager来管理
    这里写图片描述

    获取沙盒路径参数改变

    Swift3.0中GCD语法的改变

    Swift3.0中GCD写起来更简洁了。
    这里写图片描述
    GCD语法改变

    延迟执行的代码转换的不够好。应该这样写:

    // 延迟执行代码
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) {
    print(“2324”)
    }

    Swfit的关键字的变化

    private和fileprivate

    private: 私有属性和方法,仅在当前类中可以访问,不包括分类;
    fileprivate: 文件内私有属性和方法,仅在当前文件中可以访问,包括同一个文件中不同的类。

    /// 以下所有的类都在同一个文件中
    class Test: NSObject {
    // 只能在当前大括号内访问
    private var value: Int = 0
    // 只能在当前文件内访问
    fileprivate var value1: Int = 0

    // 只能在当前大括号内访问
    private func privatePractise() {
    value = 1
    value1 = 1
    fileprivatePractise()
    fileprivatePractise1()
    print(“privatePractise方法被调用了”)
    }
    // 只能在当前文件内访问
    fileprivate func fileprivatePractise() {
    privatePractise()
    fileprivatePractise()
    fileprivatePractise1()
    print(“fileprivatePractise方法被调用了”)
    }
    }
    extension Test {
    // 只能在当前大括号内访问
    private func privatePractise1() {
    value1 = 1
    fileprivatePractise()
    fileprivatePractise1()
    print(“privatePractise方法被调用了”)
    }

    // 只能在当前文件内访问
    fileprivate func fileprivatePractise1() {
    privatePractise1()
    fileprivatePractise()
    print(“fileprivatePractise方法被调用了”)
    }
    }
    class Test2: NSObject {
    func test() {
    let t = Test()
    t.value1 = 0
    t.fileprivatePractise()
    t.fileprivatePractise1()
    }
    }

    public和open

    在Swift2.3中,pubic有两层含义:

    1. 这个元素可以在其他作用域被访问
    2. 这个元素可以在其他作用域被继承或者override

    继承是一件危险的事情。尤其对于一个framework或者module的设计者而言。在自身的module内,类或者属性对于作者而言是清晰的,能否被继承或者override都是可控的。但是对于使用它的人,作者有时会希望传达出这个类或者属性不应该被继承或者修改。这个对应的就是 final。

    final的问题在于在标记之后,在任何地方都不能override。而对于lib的设计者而言,希望得到的是在module内可以被override,在被import到其他地方后其他用户使用的时候不能被override。

    这就是 open产生的初衷。通过open和public标记区别一个元素在其他module中是只能被访问还是可以被override。

    在Swift3.0中

    • public表示当前类、属性或者方法只能在当前module内被继承或者override,在当前module意外只能被访问;
    • open表示当前类、属性或者方法可以在任何地方被继承或者override;
    • final是一个辅助修饰词,表示当前类、属性或者方法在任何地方都只能被访问,不能被继承或者override;
    • internal表示默认级别。

    /// ModuleA:
    import UIKit
    /// 这个类在ModuleA的范围外是不能被继承的,只能被访问
    public class NonSubclassableParentClass: NSObject {
    // 这个方法在ModuleA的范围外只能被访问,不能被override
    public func test() {
    print(“test”)
    }
    //这是错误的写法,因为class已经不能被集成,所以她的方法的访问权限不能大于类的访问权限
    open func bar() {
    print(“bar”)
    }
    // 这个方法在任何地方都只能被访问,不能被override
    public final func baz() {
    print(“baz”)
    }
    }
    /// 在ModuleA的范围外可以被继承
    open class SubclassableParentClass: NSObject {
    // 这个属性在ModuleA的范围外只能被访问,不能被override
    public var size: Int = 0
    // 这个方法在ModuleA的范围外只能被访问,不能被override
    public func foo() {
    print(“foo”)
    }
    // 这个方法在任何地方都可以被override
    open func baz() {
    print(“baz”)
    }
    // 这个方法在任何地方都只能被访问,不能被override
    public final func bar() {
    print(“bar”)
    }
    }
    /// 这个类在任何地方都不能被继承
    public final class FinalClass {
    }

    总结

    Swfit3.0中,访问控制权限由高到低依次为:open、public、internal(默认)、fileprivate,private。

    Swift3.0中if…where和guard…where的变化

    Swift3.0中对where关键字的使用场景进行了一些调整,在Swift2.3中,我们常这样写:

    // Swift2.3
    var value: Int?
    var num: Int?

    if let v = value, n = num where v > n {
    print(“value > num”)
    }

    value = 1
    num = 2

    guard let v = value, n = num where v > n else {
    print(“value < num”)
    return
    }
    在Swift3.0中,应该这样实现:

    // Swift3.0
    var value: Int?
    var num: Int?

    if let v = value, let n = num, v > n {
    print(“value > num”)
    }

    value = 1
    num = 2

    guard let v = value, let n = num, v > n else {
    print(“value < num”)
    return
    }

    Swift3.0中枚举的变化

    在Swift2.3中,官方使用的枚举值首字母使用大写,在Swift3.0中,统一将官方使用的枚举值首字母改为了小写。虽然自定义的枚举中枚举值首字母依然可以使用大写,但是为了和官方风格保持一致,建议枚举值首字母使用小写。

    /// 这种写法是正确的(与官方风格一致,推荐使用)
    enum Direction: String {
    case east = “east”
    case south = “south”
    case west = “west”
    case north = “north”
    }

    /// 这种写法也是正确的(与官方风格不一致,不推荐使用)
    enum Sex: Int {
    case Man = 0
    case Woman = 1
    case Other = 2
    }

    Swift3.0中方法名的Swift风格化

    在Swift的方法命名规则中,参数有两个名称,一个内部名,一个外部名。当参数有外部名时,方法调用时只显示外部名,若无外部名,则默认外部名和内部名相同。
    这里写图片描述
    外部名和内部名

    在Swift2.3中,第一个参数若没有外部名,则调用时候常省略。对于常用的UIKit和Foundation框架来说,Swift2.3中的方法名称依然是OC语言的风格。
    这里写图片描述

    Swift2.3 方法名称风格

    在Swift3.0中,第一个参数若没有外部名,则调用时显示内部名,不省略。同时将常用的UIKit和Foundation框架的方法名进行了Swift风格化,使方法调用时更简洁清晰。
    这里写图片描述

    Swift3.0 方法名称风格

    两种风格方法调用对比:
    这里写图片描述
    dismiss方法swift风格化

    建议以后自定义方法时,风格尽量和Swift3.0保持一致。
    在Swift3.0 编译器环境下两种风格对比:
    这里写图片描述

    自定义方法两种风格对比

    Swift3.0中selecter的Swift风格化

    在Swift2.2中,当我们为一个按钮添加点击事件时常常这样写:
    这里写图片描述

    Swift 2.3 中 Selector写法

    在Swift2.2更新到Swift2.3后可以看到警告告诉我们这是一个OC风格的写法,建议改为Swift风格的写法。
    在Swift3.0中两种写法依然都可以使用,但是建议统一写为Swift风格的,因为你不知道什么时候OC风格的就不被允许了。
    这里写图片描述
    Swift 3.0 中 Selector写法
    运算符的变化

    1. Swift3.0中运算符的左右两边必须不能为optional。
    2. ++和–是继承自C语言中的运算符,在Swift3.0中被移除,建议使用 x += 1来代替。
      这里写图片描述

    文/光无影(简书作者)
    原文链接:http://www.jianshu.com/p/460b5424942a
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

    展开全文
  • Swift 是苹果遵循 Apache 开源授权协议开源的一门编程语言 Swift 3 源代码不兼容旧版本,主要是因为 SE-0005 和 SE-0006 的改进,这些改进不仅影响 Standard Library APIs 命名,还会完全改变 Objective-C APIs ...

    Swift 是苹果遵循 Apache 开源授权协议开源的一门编程语言

    Swift 3 源代码不兼容旧版本,主要是因为 SE-0005 和 SE-0006 的改进,这些改进不仅影响 Standard Library APIs 命名,还会完全改变 Objective-C APIs (特别是 Cocoa ) 导入到 Swift 的方式。

    为了帮助用户迁移到 Swift 3,Xcode 8.0 包含了一个代码迁移工具,可以自动处理大量必需的源变化。

    Swift 3.0是一个主要的语言版本。它不是源兼容与2.2和2.3。它包含了以下的语言变化,经历了迅速的演变过程:

    se-0002:去除局部函数声明的语法

    se-0003:从功能参数去除VaR

    se-0004:去除++和--运算符

    se-0005:更好的翻译成Objective-C API迅速

    se-0006:应用API指南标准库

    se-0007:拆下有条件和递增器回路C

    se-0008:添加序列的自选一个懒惰的flatmap

    se-0016:添加初始化int、uint转换从unsafepointer和unsafemutablepointer

    se-0017:改变托管使用unsafepointer

    se-0019:快速测试

    se-0023:API设计指南

    se-0025:作用域的访问级别

    se-0029:从功能应用程序中删除元组进行内隐行为

    se-0031型装饰调整输入的声明:

    se-0032:先添加(如:)的方法sequencetype

    se-0033:进口Objective-C常数Swift Types

    se-0034:消除线控制语句调试标识符

    se-0035:限制输入捕捉到“noescape语境

    se-0036:需要枚举实例成员实现点前缀

    se-0037:澄清意见与运营商之间的相互作用

    se-0038:包管理器支持C语言的目标

    se-0039现代化操场的文字:

    se-0040:用冒号代替等号的属性参数

    se-0043:“多模式”标签声明变量

    se-0044:进口成员

    se-0046:建立一致的标签的行为在所有参数包括第一标签

    se-0047:违约非void函数所以他们警告在未使用的结果

    se-0048:泛型类型别名

    se-0049:移动@ noescape和@ autoclosure是类型属性

    se-0052:改变iteratortype后无保障

    se-0053:删除显式使用让功能参数

    se-0054:废除implicitlyunwrappedoptional型

    se-0055:使不安全的指针为空性的显式使用可选

    se-0057:进口Objective-C轻质仿制药

    se-0059:更新API命名准则和重写设置相应的API

    se-0060:执行命令默认参数

    se-0061:添加通用的结果和错误处理autoreleasepool()

    se-0062:引用Objective-C关键路径

    se-0063:swiftpm系统模块搜索路径

    se-0064:引用属性getter和setter Objective-C选择器

    se-0065:一种新的收藏和指数模型

    se-0066:规范函数类型参数语法需要括号

    se-0067:增强浮点协议

    se-0069:易变性和基础值类型

    se-0070:使可选的要求objective-c-only

    se-0071:允许(大多数)成员引用关键词

    se-0072:完全消除隐桥接转换迅速

    se-0076:添加重写以unsafepointer源无损对unsafemutablepointer方法复制

    se-0077:改进算子的声明

    se-0081:将WHERE子句结束宣言

    se-0085:包管理器命令名称

    se-0086:滴NS前缀在急速的基础

    se-0088:迅速3命名约定libdispatch现代化

    se-0089:重命名字符串。init (_:T)

    se-0091:提高协议的操作要求

    se-0092:协议typealiases和协议扩展

    se-0093:添加一个公共基础属性切片

    se-0094:添加序列(第一:下一个:)和序列(状态:下一个:)的程序

    se-0095:替代协议< P1,P2和P1和P2 >语法语法

    se-0096:转换dynamictype从物业运营商

    se-0099:重组条件条款

    se-0101:重构sizeof和相关的功能到一个统一的memorylayout结构

    se-0102:把“只能进不能退的属性介绍空不型

    se-0103:使非逃避关闭默认

    se-0106:别名为OSX平台配置测试添加MacOS

    se-0107:unsaferawpointer API

    se-0109:除去布尔协议

    se-0111:删除函数参数的标签类型系统的意义

    se-0112:改进nserror桥接

    se-0113:以浮点加积分取整函数

    se-0114:更新缓冲区的“价值”称为“头”的名字

    se-0115:重命名文字语法协议

    se-0116:引进Objective-C ID作为迅速任何类型

    se-0117:允许区分公共通道和公共overridability

    se-0118:关闭参数名称和标签

    se-0120:修改分区方法签名

    se-0121:删除可选的比较运算符

    se-0124:Int.init(标识符)和uint. init(标识符)应该有一个位模式:标签

    se-0125:删除nonobjectivecbase和isuniquelyreferenced

    se-0127:清理程序指针和缓冲区的程序

    se-0128:改变failable unicodescalar初始化failable

    se-0129:包管理器测试的命名约定

    se-0130:替换重复string.init字符和unicodescalar形式

    se-0131 anyhashable:添加到标准库

    se-0133:重命名为joined() flatten()

    se-0134:重命名两UTF8字符串相关的性质

    se-0135:通过SWIFT版本区分包管理器支持

    se-0136:值的内存布局

    se-0137:避免锁定在传统的协议设计



    展开全文
  • Swift4.0 新特性----Xcode9的优化

    千次阅读 2017-09-14 13:08:42
    New Build System Xcode 9 引入了 New Build System,可在 Xcode 9 的 File -> Project Settings......对于 Swift 和 Objective-C 混合的项目,Swift 调用 Objective-C 时,需要建立一个 Bridging H

    New Build System


    Xcode 9 引入了 New Build System,可在 Xcode 9 的 File -> Project Settings... 中选择开启。



    预编译 Bridging Headers 文件


    对于 Swift 和 Objective-C 混合的项目,Swift 调用 Objective-C 时,需要建立一个 Bridging Headers 文件,然后把 Swift 要调用的 Objective-C 类的头文件都写在里面,编译器会读取 Bridging Headers 中的头文件,然后生成一个庞大的 Swift 文件,文件内容是这些头文件内的 API 的 Swift 版本。然后编译器会在编译每一个 Swift 文件时,都要编译一遍这个庞大的 Swift 文件的内容。

    有了预编译 Bridging Headers 以后,编译器会在预编译阶段把 Bridging Headers 编译一次,然后插入到每个 Swift 文件中,这样就大大提高了编译速度。

    苹果宣称 Xcode 9 和 Swift 4 对于 Swift 和 Objective-C 混合编译的速度提高了 40%。


    Indexing 可以在编译的同时进行


    用 Swift 开发项目时,近几个版本的 Xcode 进行 Indexing 的速度慢的令人发指。Xcode 9 和 Swift 4 在这方面做了优化,可以在编译的同时进行 Indexing,一般编译结束后 Indexing 也会同时完成。


    COW Existential Containers


    Swift 中有个东西叫 Existential Containers,它用来保存未知类型的值,它的内部是一个 Inline value buffer,如果 Inline value buffer 中的值占用空间很大时,这个值会被分配在堆上,然而在堆上分配内存是一个性能比较慢的操作。

    Swift 4 中为了优化性能引入了 COW Existential Containers,这里的 COW 就代表 “Copy-On-Write”,当存在多个相同的值时,他们会共用 buffer 上的空间,直到某个值被修改时,这个被修改的值才会被拷贝一份并分配内存空间。



    移除未调用的协议实现


    看下面的例子,Date 实现了 Equatable 和 Comparable 协议。编译时如果编译器发现没有任何地方调用了对 Date 进行大小比较的方法,编译器会移除 Comparable 协议的实现,来达到减小包大小的目的。
    struct Date {
        private let secondsSinceReferenceDate: Double
    }
    extension Date: Equatable {
        static func ==(lhs: Date, rhs: Date) -> Bool {
            return lhs.secondsSinceReferenceDate == rhs.secondsSinceReferenceDate
        }
    }
    extension Date: Comparable {
        static func <(lhs: Date, rhs: Date) -> Bool {
            return lhs.secondsSinceReferenceDate < rhs.secondsSinceReferenceDate
        }
    }


    减少隐式 @objc 自动推断


    在项目中想把 Swift 写的 API 暴露给 Objective-C 调用,需要增加 @objc。在 Swift 3 中,编译器会在很多地方为我们隐式的加上 @objc,例如当一个类继承于 NSObject,那么这个类的所有方法都会被隐式的加上 @objc。
    class MyClass: NSObject {
        func print() { ... } // 包含隐式的 @objc
        func show() { ... } // 包含隐式的 @objc
    }

    这样很多并不需要暴露给 Objective-C 也被加上了 @objc。大量 @objc 会导致二进制文件大小的增加。

    在 Swift 4 中,隐式 @objc 自动推断只会发生在很少的当必须要使用 @objc 的情况,比如:

    复写父类的 Objective-C 方法
    符合一个 Objective-C 的协议
    其它大多数地方必须手工显示的加上 @objc。

    减少了隐式 @objc 自动推断后,Apple Music app 的包大小减少了 5.7%。



    Exclusive Access to Memory


    在遍历一个 Collection 的时候可以去修改每一个元素的值,但是在遍历时如果去添加或删除一个元素就可能会引起 Crash。
    例如为 MutableCollection 扩展一个 modifyEach 方法来修改每个元素的值,代码如下:

    extension MutableCollection {
        mutating func modifyEach(_ body: (inout Element) -> ()) {
            for index in self.indices {
                body(&self[index])
            }
        }
    }

    假如在调用 modifyEach 时去删除元素:
    var numbers = [1, 2, 3]
    numbers.modifyEach { element in
        element *= 2
        numbers.removeAll()
    }

    就会在运行时 Crash。
    Swift 4 中引入了 Exclusive Access to Memory,使得这个错误可以在编译时被检查出来。


    兼容性


    Xcode 9 中同时集成了 Swift 3.2 和 Swift 4。
    Swift 3.2 完全兼容 Swift 3.1,并会在过时的语法或函数上报告警告。
    Swift 3.2 具有 Swift 4 的一些写法,但是性能不如 Swift 4。
    Swift 3.2 和 Swift 4 可以混合编译,可以指定一部分模块用 Swift 3.2 编译,一部分用 Swift 4 编译。
    迁移到 Swift 4 后能获得 Swift 4 所有的新特性,并且性能比 Swift 3.2 好。
    总结:当 Xcode 正式版发布后,现有的 Swift 代码可以直接升级到 Swift 3.2 而不用做任何改动,后续可以再迁移到 Swift 4。或者直接迁移到 Swift 4 也可以,Swift 4 相比 Swift 3 的 API 变化还是不大的,很多第三方库都可以直接用 Swift 4 编译。Swift 1 到 2 和 Swift 2 到 3 的迁移的痛苦在 3 到 4 的迁移上已经大大改善了。

    展开全文
  • 前两天,刚刚升级了Xcode到8.0, swift3.0, 然后运行项目就崩溃了,我的程序报了200多个错。 个人建议:刚开始使用Xcode8打开之前的项目会有很多问题,所以建议大家把Xcode7的版本也保留上 首先先给电脑上现有的...
  • Swift 4.0 更新合集、新功能汇总

    万次阅读 2017-06-10 11:48:24
    Swift 4是苹果计划于2017年秋季推出的最新版本,其主要重点是提供与Swift 3代码的源兼容性,并努力实现ABI稳定性。 本文重点介绍对Swift的更改将对您的代码产生最大的影响。 而且,让我们开始吧!
  • 每当看到新的编程语言我总是会有相当大的兴趣,是的,Swift 3是一门『新语言』,因为它看起来,怎么都不像过往的 Swift。打开一个老的项目时,发现满目疮痍,基本上能标红的代码全被标红了。先来个截图提提神: 图...
  • swift 框架大全--NB 转自github

    万次阅读 2016-11-03 16:47:01
    Swift从Objective-C混合的md文件中抽出(正在进行…)使用方法:根据目录关键字搜索,记得包含@,以保证搜索目录关键字的唯一性。问题反馈:请广大网友只按照目录结构(即使目录结构有问题)添加三方库,并pu
  • swift 框架大全

    万次阅读 2017-06-26 11:27:09
    版本:Swift github排名 https://github.com/trending,github搜索:https://github.com/search 主要工作说明:  1. 将Swift从Objective-C混合的md文件中抽出(正在进行…) 使用方法:根据目录关键字...
  • 在介绍 Swift 4.0 的新特性之前,还是让我们先回到 2014 年 —— Swift 横空出世的那一年吧。 2014 年的 WWDC 大会上,苹果在毫无预兆的情况下发布了用于 Mac OS X 和 iOS 编程的新一代编程语言 Swift。这一举动让...
  • Swift 4.0 新特性

    千次阅读 2017-08-15 19:37:46
    WWDC 2017 带来了很多惊喜,在这次大会上,Swift 4 也伴随着 Xcode 9 测试版来到了我们的面前,虽然正式版要8月底9月初才会公布,但很多强大的新特性正吸引我们去学习它。根据大会上已经开放的新特性,先一睹为快。...
  • TimLiu-iOSgithub排名 https://github.com/trending,github搜索:https://github.com/searchObjective-C版本点击这里 欢迎加入QQ交流群: 594119878使用方法:根据目录关键字搜索,记得包含@,以保证搜索目录关键字...
  • iOS开发系列--Swift 3.0

    千次阅读 2016-06-22 13:12:03
    从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行。在WWDC16上Apple公布了Swift3.0...
  • UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件。 SVPullToRefresh- 下拉刷新...MJRefresh- 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能。...XHRefreshContr
  • 常用的iOS第三方框架

    万次阅读 2016-09-22 13:57:28
    目录 UI 下拉刷新模糊效果AutoLayout富文本图表表相关与Tabbar 隐藏与显示HUD与Toast对话框其他UI ...网络连接图像获取网络聊天网络测试网页框架WebView与WKWebView ...Model通讯录其他库数据库
  • Swift 3.0介绍

    千次阅读 2017-02-22 21:41:39
    概述我接触swift是从2.0开始,当时出于对ios的好奇,加上官方的大力推荐,于是扎入了ios的怀抱,从1.2发展到了今天的3.0.1,这期间由于...尽管对于开发人员来说Swift3.0的变化会令你的程序几乎处处报错,但是试想一下如
  • Swift版本语法变化

    2018-07-19 10:41:03
    Swift3.0语法变化 swift4.0 新特性 简单复制整理 Swift3.0语法变化 1. swift代码自动更新 Edit-&gt;Convert-&gt;To Current Swift Syntax… 建议只更新自身模块,三方的不要更新 2. ...
  • 转自: http://www.cnblogs.com/zyjzyj/p/6015625.html github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自github:...UI
  • iOS GitHub上常用第三方框架

    千次阅读 2017-04-19 15:39:12
    转载自:https://github.com/Tim9Liu9/TimLiu-iOS ...下拉刷新模糊效果AutoLayout富文本图表表相关与Tabbar隐藏与显示HUD与Toast对话框其他UI ...网络连接图像获取网络聊天网络测试网页框架WebView与WKWebView
1 2 3 4 5 ... 20
收藏数 780
精华内容 312
关键字:

4.0语法变化 swift