• 早在2018年9月,Apple公司的Swift 开发团队在官网更新了 “Swift 5.0 Release Process” ,主要介绍 Swift 5.0 的开发目标、发布流程和预估时间表。据介绍Swift5.0最大的目标是实现语言ABI的稳定性。 不久前,Swift...

    早在2018年9月,Apple公司的Swift 开发团队在官网更新了 “Swift 5.0 Release Process” ,主要介绍 Swift 5.0 的开发目标、发布流程和预估时间表。据介绍Swift5.0最大的目标是实现语言ABI的稳定性。

    不久前,Swift社区发布的Swift5.0,在历经众多版本之后,终于迎来ABI的稳定,引来众多iOS开发者欢呼,很多人对此深感好奇。究竟ABI的稳定对于Swift意味着什么呢?

     

    首先我们要搞清楚什么是ABI

    ABI (Application Binary Interface) 定义:“在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。” 说白了就是Swift 二进制程序与系统或者其它程序交互时会调用的接口。

     

    以往ABI不稳定的版本,打包 Swift 程序时, 必须嵌入一个 Swift 标准库. 因为系统不知道开发者使用程序时用的 ABI 是哪个版本, 所以必须没办法在系统内部内置一套标准库.

    ABI不稳定还会让第三方 SDK 开发困难. 应用与第三方 SDK 使用的 ABI 版本如果不同就会出现问题, 例如说 Swift 2和 Swift 3打包出来的库就没办法互相调用.

     

    而现在ABI的稳定意味着:

     Apple会根据iOS操作系统创建不同的下载包. 不再需要Swift的库,APP尺寸会变小。而且,因为系统集成了Swift, 大家都用同一个Swift了, app启动时候也就不需要额外加载Swift, 所以在新的系统中会更加节省内存.

    另外,对开发者最友好的就是再也不需要“从入门到入门”,每个大版本更新就要重新学习,Swift的语法基本不会再有大的变动。这也是一众iOS开发欢呼的重要原因。

     

    同时,ABI的稳定意味着学习Swift的最佳时机已经到来,知名iOS开发者,流行开源框架作者李明杰老师为了帮助在职的iOS开发者更全面、系统的学习Swift,特意开设《从入门到精通Swift编程》线上课程,通过线上直播的形式授课,每节课都会提供高清录播视频,错过直播或者想复习的同学可以随时随地回看。

     

    课程试听:

     

    基本运算、流程控制、函数        时长:1:55:27

    字符、字符串、枚举、集合、闭包       时长:2:00:04

     

    视频及课件下载请联系管理员

     

    展开全文
  • Swift4 MD5加密

    2018-08-30 17:20:37
    Swift4.2已近发布一段时间了,新版本的稳定性以及对上个版本的兼容性都有了显著的提升(再也不用吐槽:每个Swift版本都像是一门新的语言啦,hahaha…)。现在大多IOS开发者对Swift持观望态度,原因无非是这门语言太...

    Swift4.2已近发布一段时间了,新版本的稳定性以及对上个版本的兼容性都有了显著的提升(再也不用吐槽:每个Swift版本都像是一门新的语言啦,hahaha…)。现在大多IOS开发者对Swift持观望态度,原因无非是这门语言太年轻,不稳定之类的,再加之ABI稳定版本(据说是Swift5)不知何时能来,大家普遍生出了再等等的心态。然而,总结这几日的使用情况,Swift4.2的简洁和强大的表现力深深的折服了我,走过了四年的风风雨雨, Swift日趋成熟,所以,现在上车,恰逢其时…

    言归正传,下面记录下今天遇到的问题吧:

    是的,很简单的一个问题,Swift里的MD5加密。搜了些网上的,发现都有些陈旧,各种报错,有的甚至还要桥接OC。综合大家的写法,找到一段能稳定跑起来的代码,暂时用起来没有问题。下面贴出来,希望能帮到大家,欢迎指正:

    import Foundation
    // 导入CommonCrypto
    import CommonCrypto
    
    // 直接给String扩展方法
    extension String {
        func md5() -> String {
            let str = self.cString(using: String.Encoding.utf8)
            let strLen = CUnsignedInt(self.lengthOfBytes(using: String.Encoding.utf8))
            let digestLen = Int(CC_MD5_DIGEST_LENGTH)
            let result = UnsafeMutablePointer<UInt8>.allocate(capacity: 16)
            CC_MD5(str!, strLen, result)
            let hash = NSMutableString()
            for i in 0 ..< digestLen {
                hash.appendFormat("%02x", result[i])
            }
            free(result)
            return String(format: hash as String)
        }
    }

    用法:

    let str = "xxx"
    let sign = str.md5()
    print("result in \(sign)")

    发现Swift支持了namespace后,再也不用导一大推头文件了,又想到隔壁的Java早就支持了,瞬间感觉OC Low了很多;Swift不是纯面向对象的语言,这意味着,函数可以单独写在一个文件里,直接调用;struct也升级到将要和class平起平坐的地位,enum强大的令人难以置信;还有很多新特性,像一个个黑魔法,有着无限魔力,令人着迷。接下来,会继续探索,Swift,你上车了吗?

    展开全文
  • \看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!\\\随着Swift 4.1进入beta阶段,Swift团队开始将注意力聚焦在新...\\Swift 4.2的主要目标是为ABI稳定性做准备,ABI将会...
    \

    看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!

    \
    \\

    随着Swift 4.1进入beta阶段,Swift团队开始将注意力聚焦在新版本Swift 4.2的开发上。新版本除了bug修复和编译性能方面的改进,还会继续增强Application Binary Interface(ABI)稳定性。

    \\

    Swift 4.2的主要目标是为ABI稳定性做准备,ABI将会是Swift 5的主要目标。据苹果公司语言和运行时经理Ted Kremenek透露,Swift 4.2将会对ABI的底层做出一些与性能有关的改动,目的是在Swift 5中正式发布最终版的ABI之前,能够从开发者那里获取反馈。

    \\

    与Swift 4.2相关的代码都提交到swift-4.2-branch,每两周从master分支合并一次。从4月20号开始,在从master分支进行最后一次合并之后,swift-4.2-branch只接受关键的bug修复代码。

    \\

    ABI稳定性让不同版本Swift编译出来的应用程序和类库可以兼容,对于框架开发者来说,这是最基础的一项特性。如果缺乏ABI稳定性,那么就需要为不同版本的编译器提供不同版本的框架。ABI仪表盘上列出了ABI最终版需要包含的变更清单,将于2018年下半年发布,不过目前并不清楚哪些变更将被包含在Swift 4.2中,哪些将被包含在Swift 5中。

    \\

    为了遵守Swift 4的诺言,Swift 4.2会继续保证兼容4.x的代码,也就是说,能用Swift 4.x编译器编译的代码也可以使用Swift 4.2的编译器进行编译。不过,这并不包含因bug修复导致的破坏性变更,也就是那些因编译器的bug而能够通过编译的错误代码。在兼容模式下,仍然可以使用Swift 4.2来编译Swift 3的代码。

    \\

    Swift 4发布于2017年9月,目标是改进语言和编译器性能和稳定性,同时保持代码的兼容性。ABI稳定性原本是Swift 4的目标,后来被延期到了Swift 5中。

    \\

    查看英文原文Swift 4.2 Enters Final Development Stage, Paving the Way for Swift 5

    展开全文
  • 最近发布在swift-evolution邮件杂志上的《Swift ABI稳定性宣言》旨在汇编公开宣称Swift ABI稳定前所需解决的所有问题。\\《Swift ABI稳定性宣言》的作者——苹果公司工程师Michael Ilseman写道,ABI稳定性的目标包含...

    最近发布在swift-evolution邮件杂志上的《Swift ABI稳定性宣言》旨在汇编公开宣称Swift ABI稳定前所需解决的所有问题。

    \\

    《Swift ABI稳定性宣言》的作者——苹果公司工程师Michael Ilseman写道,ABI稳定性的目标包含以下两个主要部分:

    \\
    • 定义一个模块文件,这个模块文件包含了Swift编译器关于把公共框架的API与在运行时加载的可执行代码捆绑在一起的描述的标准化表示。\\t
    • 定义一系列影响低级别细节的约定,例如如何调用函数,如何在内存中表示数据和元数据等。\

    Ilseman特别指出需要致力于以下六个方面:

    \\
    • 数据布局,主要是定义如何在内存中布置struct和class实例。\\t
    • 类型元数据,要求有特定的内存布局或API查询。\\t
    • name mangling,主要是定义编译器如何分别标识外部符号,例如类型和函数。\\t
    • 函数调用约定,主要是定义如何将参数传入/传出函数,以及该保留哪些寄存器等。\\t
    • Swift runtime,主要是提供动态转换、引用计数、反射等的基本机制,属于ABI的一部分。\\t
    • 标准库,它的API是ABI的一部分,应用程序和库都会调用它。\

    ABI稳定性是Swift 4计划的优先级最高的功能之一,对第三方框架开发人员至关重要。正如InfoQ报道所指出,Swift 3因为无法定义锁定ABI之前需要定义的一些方面,所以没有实现ABI的稳定性。在最近的Accidental TechS播客采访中,前苹果工程师兼Swift创始人Chris Lattner表示,ABI稳定性对于应用程序开发人员来说并不重要,但“对苹果公司来说非常重要”,并且它是公司内部采用Swift的关键因素:

    \\
    \

    要真正地在苹果公司全面采用Swift,Swift团队必须实现一些特定目标。ABI稳定性是阻止框架开发人员采用Swift的首要因素。这是一件非常重要的事情,也是ABI稳定性总是排在很高优先等级的原因之一。

    \
    \\

    实际上,目前仍然不完全清楚Swift 4 ABI是否能被宣称为具有稳定性。Lattner说,这可能受两个因素的影响,它们是ABI稳定性包含的工作量以及它可能不是Swift社区最重要的事情。

    \\
    \

    如果他们什么时候决定专注于Swift 4中其他比ABI稳定性更重要的方面,我也不会感到惊讶。

    \
    \\

    Lattner指出了一些Swift社区中排在更高优先级别的问题:比如使编译器更具可靠性,更准确的错误提示,加快编译速度,以及使Swift更适用于大型项目。

    \\

    查看英文原文The Road to Swift 4 ABI Stability

    \\

    感谢王纯超对本文的审校。

    \\

    给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

    展开全文
  • Swift 5已经发布下面是官方swift5的介绍。 IntroducingSwift 5.1 Swift 5.1now makes it easier to create and share binary frameworks with others. It also includes features that make it easier to design ...

    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还是比较简单。

    展开全文
  • 原文链接 ABI 的稳定,会让 Swift 在 Apple 平台上有更大的发展。不过由于历史原因,在系统支持和兼容性方面,我们还会面临一些问题。Swift 官方博客也专门发...随着 Swift 5 的发布,Swift 的 ABI 也终于稳定下来...
  • Swift 4 在 Swift 3 的基础上,提供了更强大的稳健性和稳定性,为 Swift 3 提供源码兼容性,对标准库进行改进,并添加了归档和序列化等功能。 你可以通过观看 WWDC 2017: What’s New in Swift 或完整发行说明...
  • 近日,苹果开发者博客更新了一篇关于Swift 5的文章,带来了Swift 5新特性的消息,其中最受开发期待的莫过于iOS 12.2将带来ABI 稳定性,这意味着基础库将植入系统中,不再包含在App中,应用程序的体积会更小,更多新...
  • Swift 4迁移总结:喜忧参半,新的起点 每日一篇优秀博文 这次Swift 3 到 4 的迁移代码要改动的地方比较少,花了一个下午的时间就完成了迁移。Swift 把原来 4.0 的目标从 ABI 稳定改为了源码兼容,此次代码的兼容...
  • Swift5 新特性预览

    2018-05-10 17:19:01
    Apple将在今年晚些时候大概秋季发布会发布Swift5,Swift5主要焦点在于ABI(Application Binary Interface)对于Swift标准库的稳定,下面介绍Swift5特性: 1.ABI稳定 1.1什么是ABI稳定 在运行时Swift二进制文件通过...
  • 对于开发应用来说,列表是最常用到一个控件,而且...如果有不同的版本,有可能不兼容,毕竟swift版本现在还没有稳定。 以手机通讯录为例,我们先来梳理一下思路: 插入操作:当我们要插入一个人的信息时候,我们需...
  • 开发四年只会写业务代码,分布式高并发都不会还做程序员? Swift 5 发布了,这是一个重要里程碑。 此版本终于...
  •   很早的时候就学习swift了,但是一直没有机会去实践,最近swift版本逐渐的稳定下来了,而且swift的语言写起来更加的简洁,加上年前已经用swift写了一个工具app,最近在做项目优化,打算把定位功能封装成一个pod库...
  • Swift版本历史和各版本特性 author:Crius time:2020/5/12 type:学习笔记 发展历程: 从2014年至今,已经有15个版本发布,其中5个大版本,10个小版本; 与之对比的是Objective-C从80年代至今,只有两个版本; ...
  • OC与swift区别

    2019-04-03 10:07:42
    swift 是在oc上提出来的 swift中有oc中没有的类 比如 ...4.在swift 中,let 声明的常量的值不能改变 var 生命的变量的值是可以改变的 在swift 中 继承里面写final防止被重写 类型的转换 as 7.oc 是动态语言有ru...
  • 之前Swift一直不稳定,看过书,读过blog,今天开始,我以对比(OC:Swift)的形式将swift中常见的语法,以及注意事项,欢迎大家跟我一起学习Swift。// 1.导入框架 // OC导入框架 #import &lt;UIKit/UIKit.h&....
1 2 3 4 5 ... 20
收藏数 9,286
精华内容 3,714