2019-09-30 14:53:23 sun6223508 阅读数 109

Swift 5已经发布下面是官方swift5的介绍。

Introducing Swift 5.1

Swift 5.1 now makes it easier to create and share binary frameworks with others. It also includes features that make it easier to design better APIs and reduce the amount of common boilerplate code.

Key Features

  • Module stability defines a new text-based module interface file that describes the API of a binary framework.
  • Property wrappers introduce a general purpose syntax for defining custom access patterns for property values.
  • Opaque result types help hide implementation details in APIs.
  • 'Self' can now be used for classes and value types.
  • Support for handling and updating diffs on collections of appropriate types.
  • Improvements to SIMD and String types.

此版本终于迎来了 ABI 稳定,因此 Swift 运行时现在可以引入到 Apple 平台各类操作系统的不同版本中,包括 macOS、iOS、tvOS 与 watchOS。Swift 5 还引入了构建块的新功能,包括重新实现 String、在运行时对执行内存的独占访问与新数据类型,以及对动态可调用类型的支持。

Swift 5 兼容 Swift 4、Swift 4.1 和 Swift 4.2,Xcode 10.2 中包含了一个代码迁移器,可以自动处理许多迁移需要用到的源码更改。

语言更新

稳定的 ABI 与二进制兼容性

ABI 已经稳定,因此 Swift 库现在可以整合到每个 macOS、iOS、tvOS 和 watchOS 版本中,应用将更容易构建,并且体积更小,因为它们不必包含这些库。

标准库更新

Swift 5 中的标准库包括以下新特性:

  • 使用 UTF-8 编码重新实现的 String 可以产生更快的代码,之前我们已经报导过:Swift 5 将使用 UTF-8 作为首选字符串编码
  • 改进了对字符串中原生文本的支持
  • 标准库添加 Result 和 SIMD 矢量类型
  • 增强了字符串插值功能,为从数据构造文本提供了更多灵活性
  • 改进了 Dictionary 和 Set 的性能

 

目前应该有不少的项目还是处于OC Swift混编的状态, 那么如何将这部分老的OC代码迁移至Swift版本?

1:重写(量大的话不太现实), 比较耗费精力和时间
2:使用工具(本片文章主要推荐的)   

备份好代码,对于 Xcode 我有一个经验再次和大家分享一下:Xcode 有两个版本,一个不稳定的版本和一个更不稳定的版本。

Swiftify

xcode可直接下载安装, <Swiftify for Xcode>下载安装后需要简单的配置方可使用:

  1. -系统偏好设置>"扩展"中为Xcode Source Editor(Xcode源码编辑器)选择"Swiftyfy for Xcode"
  2. 打开Xcode > Editor > 菜单下看到新的"Swiftify"子菜单

这里有三个选项:

  • 1: Convert Selection to Swift(将选中的代码块转化成Swift)
  • 2:Convert File to Swift(将文件转化成swift语言)
  • 3:Paste as Swift (以Swift方式粘贴代码)

不同注册用户代码转化有大小限制:

  • 未注册用户: 1KB/每次 大概也就100代码不到吧
  • 注册未付费用户: 2KB/每次

选中代码转化成Swift快捷键配置

自动转化配置项介绍

功能丰富, 分别针对工程文件,静态库文件,部分OC代码转化后OC Swift混编的处理, PCH的处理,Xib/Storyboard处理,被转化后的swift文件被其他OC文件引用的处理,'\n'字符串的出里,以及是否需要将使用的静态库转化成动态库的处理等

文档列表都在这里

https://support.swiftify.com/hc/en-us/articles/360028372231-Update-Xcode-project-files

链接:

自动转化配置项

网页端转化链接:
https://objectivec2swift.com/#/converter/code/

相对于  swift3迁移swift4    swift3迁移swift5还是比较简单。

2016-12-17 10:03:04 sinat_20037505 阅读数 400

        /**

         参数的常量和变量特性

         例子交换 a b

         */

        

        swap3(a: 5, b: 3)



    /**

     交换 a b

     默认形式参数 a  b 都是常量,不可以修改

     */

    func swap(a:Int, b:Int) -> Void {

//        let t = a

//        a = b

//        b = t

    }


    /**

     swift 3.0 不让这样子写

     Parameters may not have the 'var' specifier

     */

//    func swap2( var a:Int, var b:Int) -> Void {

//        let t = a

//        a = b

//        b = t

//    }

    

    

    func swap3(a:Int, b:Int) -> Void {

        

        var a = a

        var b = b

        let t = a

        a = b

        b = t

        

        print("\(a), \(b)")

        


    }

    



2016-12-12 05:13:14 sinat_20037505 阅读数 170

/**

         布尔类型 

         true  false

         */

        

        let turnOffLight = 1;

        

        /**

         swift if 后面只能放个布尔类型的成员变量或者常量

         放布尔类型的表达式

         这个和C语言 OC是不一样的

         */

        if turnOffLight == 1 {

            print("Turn OFF")

        }

        

        let flag = true

        

        

        if flag

        {

            print("Turn OFF")

        }

        else

        {

            print("Turn ON")

        }

        

        let varValue = 1

        // 可以看到这个地方,如果漏写了一个等号,会有报错,

        // 因为 if 后面只能放布尔值;这就避免了其他语言会把它当真使用的

        if varValue == 1 {

            print(varValue)

        }


2018-05-07 18:49:20 fzhlee 阅读数 101

原文:http://coolketang.com/staticCoding/5a99261ed50eee2ea303773d.html

1. 本节课将为你演示闭包的使用,闭包功能使编码更加简洁,符合开发语言的现代、简便明了的特点。 



2. 首先定义一个函数类型的变量,它拥有两个整型参数,并返回一个整型的结果。等号下方的大括号,是用来实用一个函数功能的代码块。 


3. 然后在大括号内,输入两行代码。前一行代码,用来声明函数代码块的参数和返回值信息,然后将对参数的操作,放置在in的下方。 


4. 通过该函数类型的变量,即可调用函数的功能:用来获得两个参数的和。 


5. 这里创建了一个函数,它同样可以实现和上方代码相同的功能。 


6. 调用的方式也是一样的。 


7. 在使用闭包来声明一个函数类型的变量时,可以省略对变量类型的定义,系统会自动推断出它的类型。 


8. 接着使用相同的代码,实现函数的功能即可。 


9. 其实我们还有更加简单的方式,在等号的右侧,通过一个省略了参数声明的闭包语句,给变量赋予了返回两个参数之和的函数功能。 


10. 使用该函数变量,计算两个参数的和。 


11. 这种函数变量的声明方式,仍然可以进行简化,使用$0和$1表示第一个参数和第二个参数,并且省略了return操作符。 


12. 使用该函数变量,计算两个参数的和。 


13. 闭包语句随处可见,例如通过系统提供的排序方法sorted,对一个数组进行排序,在此通过小于号,采用升序排列的方式。点击显示结果图标,显示结果列表。 


14. 排序方法共进行了4次操作,点击显示结果图标,隐藏结果列表。 


15. 继续代码的编写。 


16. 输出排序后的数组,从右侧可以看出使用闭包排序后的效果。 


17. 闭包语句经常和方法声明配合使用,但是闭包语句通常放在最后一个参数的位置。在此添加一个方法,该方法拥有一个函数类型的参数,最后返回由该函数参数执行后的结果。 


18. 然后使用闭包语句,使用第三个参数的函数功能。 


19. 这样就可以将其它的函数,作为该函数的参数进行调用。 


20. 同样可以采用更加简便的方式,完成相同的功能。在此只使用一个加号,代替求和闭包。观察右侧输出的结果,和上面的结果是一致的。 


21. 你甚至可以将加号,修改为乘号。 


22. 无论加号、乘号,还是其它运算符号,其实都是对本行语句中的闭包语句的一种省略的写法。点击显示结果图标,查看本行代码执行的结果,并结束对闭包功能的讨论。 


23. 


本文整理自:《Swift4互动教程》,真正的[手把手]教学模式,用最快的速度上手iOS开发和Swift语言,苹果商店App Store免费下载:https://itunes.apple.com/cn/app/id1320746678,或扫描本页底部的二维码。课程配套素材下载地址:资料下载


2016-12-22 11:41:59 sinat_20037505 阅读数 421

        /**

         15.5-隐式强引用

         */

        

        class Student {

            var name: String

            init(name: String) {

                self.name = name

            }

            

            func show() -> Void {

                print("name==\(name)")

            }

            deinit {

                print("\(name) deinit!")

            }

        }

        

        // 此时, stu0 stu1都引用了同一个对象

        var stu0: Student? = Student.init(name: "Tom")

        var stu1 = stu0

        

        

        stu0 = nil

        stu1 = nil

        

        /**

         上面的这个是显式的强引用

         */

        

        

        

        /**

         什么是隐式的强引用呢?

         对象加入数组中,对象如果是引用数据类型,那么数组会强引用该对象。

         数组让该对象的引用计数加1

         */

        var stuarray = [Student.init(name: "zhangsan"), Student.init(name: "lisi")]

        stuarray[0].name = "zhangsanfeng"

        /**

         1)当某个对象不在属于数组时,该对象的引用计数会减1

         2)数组本身被销毁的时候,它包含的所有对象不再属于它,因此如果对象是引用数据类型,该对象的引用计数减1

         */

        

        

        /**

         这就是隐式强引用的一个例子。

         还有一些其他的例子,比如说我们的定时器,需要注册一个对象,定时器被这个对象引用也是一个强引用;

         子试图加入到父视图以后,父视图对子视图的引用也是强引用。

         只要不是循环强引用,就没啥事。

         */


6.5 Swift尾随闭包

阅读数 162

10.5 Swift类方法

阅读数 269

没有更多推荐了,返回首页