MG的Swift空间

Swift4.0新特性(下)

2017-06-14  本文已影响335人  Mg明明就是你

Swift的180个介绍

  • 一、新增一个swapAt方法

var numbers = [1,2,3,4,5,6]
print(numbers)  // [1,2,3,4,5,6]
numbers.swapAt(2, 5)
print(numbers)  // [1, 2, 6, 4, 5, 3]
swap(&numbers[0], &numbers[1])
print(numbers)  // [2, 1, 6, 4, 5, 3]
打印效果.png
  • 二、SE-0148使用泛型下标操作符

struct JSON {
      private var data: [String: Any]
      init(data: [String: Any]) {
          self.data = data
      }
      subscript(key: String) -> Any? {
          return data[key]
      }
}
let json = JSON(data: [
        "name": "MG明明",
        "age": 43
    ])
let name: String? = json["name"] as? String  // "MG明明"
let age: Int? = json["age"] as? Int          // 43
struct JSON {
      private var data: [String: Any]
      init(data: [String: Any]) {
          self.data = data
      }
      subscript <T>(key: String) -> T? {
          return data[key] as? T
      }
}
let json = JSON(data: [
        "name": "MG明明",
        "age": 43
    ])
let name: String? = json["name"]   // "MG明明"
let age: Int? = json["age"]        // 43

  • 三、#SE-0156 Subtype existential
protocol P {}
struct S : P {}
class C : P {}
class D { }
let t: AnyObject & P = S() // Compiler error: S is not of class type
let u: AnyObject & P = C() // Compiles successfully
let v: P & AnyObject = C() // Compiles successfully
let w: P & AnyObject = D() // Compiler error: class D does not conform to protocol P
protocol P {}
class C {}
class D : C { }
class E : C { }
class F : D, P { }
let t: C & D & P = F() // Okay: F is a subclass of D and conforms to P
let u: D & P = t       // Okay: D & P is equivalent to C & D & P
let v: C & D & P = u   // Okay: C & D & P is equivalent to D & P
let w: D & E & P       // Compiler error: D is not a subclass of E or vice-versa


  • 轻轻点击,关注我简书

轻轻点击,关注我简书

轻轻点击,关注我微博

浏览我的GitHub


  • 扫一扫,关注我

扫一扫,关注我.jpg
上一篇下一篇

猜你喜欢

热点阅读