SwiftBlogSwift_Learn一起修炼swift

Swift译:《宣告Swift3结束和Swift4开启》

2016-07-17  本文已影响7506人  星期五__

原文作者:Erica Sadun
原文链接:http://ericasadun.com
时间:2016年7月15日
译者:与狼同行

Swift3已经是一个十分引入瞩目的产品,它汇聚了许多来自Swift开源社区的人们所给予的灵感,想法还有辛勤的劳动。
可是现在,我想谈一谈Swift3发布的终局:
这里我来举几个关键的点:

SE-0042: 拍扁那些未应用状态的函数实例

译者注:一个未应用状态的函数实例(unapplied method )是指诸如下面例子中的Type.instanceMethod,
产生一种诸如(Self) -> (Args...) -> Ret:的函数类型
struct Type {
  var x: Int
  func instanceMethod(y y: Int) -> Int {
    return x + y
  }
}
let f = Type.instanceMethod // f : (Type) -> (y: Int) -> Int
f(Type(x: 1))(y: 2) 
为了将未应用状态的函数实例更有用和持久来符合Swift语义,并且对于mutating方法更有效率,
我们应该将其变为一种更平坦的函数类型(Self, Args...) -> Ret:
let f = Type.instanceMethod // f: (Type, y: Int) -> Int
f(Type(x: 1), y: 2)         // ==> 3

SE-0068:对于值类型和类一级成员,将dynamicType更名为Self
SE-0075: 添加一个生成配置导入测试

译者介绍:形如此类:
#if canImport(UIKit)
   // UIKit-based code
   #elseif canImport(Cocoa)
   // OSX code
   #elseif
   // Workaround/text, whatever
#endif
#if !os(Linux)
   // Matches OSX, iOS, watchOS, tvOS, Windows, FreeBSD
#endif

SE-0096: 将dynamicType从一个属性转变为操作符

译者介绍:
在swift中,dynamicType是一个属性。也因为这样,对于任何值不管他有没有用,你都可以写
这样的代码:比如说: 4.dynamicType和myFunction().dynamicType。
与大多数属性不同的是,它并不表示特定类型的逻辑特性。
由于dynamicType表现的更像一个操作符就像sizeof。希望能修改语法。

SE-0077: 改进操作符声明

译者介绍:希望用操作符的排序来取代数字优先级
// 之前的语法
infix operator <> { precedence 100 associativity left }
// 改进后的语法
precedencegroup ComparativePrecedence {
  associativity: left
  strongerThan: LogicalAndPrecedence
}
infix operator <> : ComparativePrecedence

SE-0092: 在协议和协议扩展中的Typealiases
SE-0110: 区分单元组函数类型和多参数函数类型

译者介绍:如今,我们我们可以这样写代码:
let fn1 : (Int, Int) -> Void = { x in
    // The type of x is the tuple (Int, Int).
    // ...
}
let fn2 : (Int, Int) -> Void = { x, y in
    // The type of x is Int, the type of y is Int.
    // ...
}
一个存在n个参数的函数变量可以被放入n个参数,也可以放入一个含n个参数的元组。
这违背了"最小诧异原则"(least surprise)和弱化了类型安全,应该被修改。
议案者提议:(1)fn2表达式应该可行,fn1应该不可行
(2)一个含n个参数的元组的函数类型应该套双层括号:
let a : ((Int, Int, Int)) -> Int = { x in return x.0 + x.1 + x.2 }

一些建议比如说SE-0075这个议案,这件事我们可以在任何时间去添加,但是许多其他的议案都目标于提升Swift3的稳定性。我想让这个社区的人知道这些议案当前没有被实现,希望能够有兴趣帮助这些议案发生在Swift3中。
相关的是,我也特别感谢社区实现:

SE-0095: 用P1 & P2 语法代替 protocol<P1,P2> 语法 。

除了这些语言的议案,还有一系列关于标准库优秀的工作,在Swift3中将会变得更出色,以下是一个要点来总结这些任务。
https://gist.github.com/gribozavr/37e811f12b27c6
最后感谢每一个人,嗯,我是指那些为Swift3付出贡献的每一个人~

上一篇下一篇

猜你喜欢

热点阅读