Swift 3 新特性 3.

2018-11-11  本文已影响0人  Maserati丶

课程来自慕课网liuyubobobo老师


Swift3的其他变化

1.Never类型

func myFatalError() -> Never {  // Never使得函数有返回值,但是正常情况下没有返回值
    print("!!!!!")
    fatalError()
}

func mod(_ a: Int, _ b: Int) -> Int? {
    guard b != 0 else{
        // guard 需要函数有返回值
        myFatalError()
    }
    return a%b
}

mod(10, 0)

2.隐式可选型的类型推测

let a: Int! = 5
let b = a  // b: Int?
let c:Int = a  // c: Int
let d = a + 0  // d: Int

3.(#keyPath)

let superviewColor = #keyPath(UIView.superview.backgroundColor)

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
view.backgroundColor = UIColor.blue
view.addSubview(label)

label.superview?.backgroundColor  // UIColor.blue
label.value(forKeyPath: superviewColor)  // UIColor.blue

4.新的索引使用

let str = "Hello,Swift 3"

let j = str.startIndex
let k = str.index(j, offsetBy: 5)

str[k]  // ,
str[j..<k]  // Hello (Swift 4)

5.FloatintPoint

func hypotenuse<T: FloatingPoint>(_ a: T, _ b: T) -> T {
    return (a * a + b * b).squareRoot()
}

let aFloat: Float = 3.0
let bFloat: Float = 4.0
hypotenuse(aFloat, bFloat)  // 5

let aCGFloat: CGFloat = 3.0
let bCGFloat: CGFloat = 4.0
hypotenuse(aCGFloat, bCGFloat)  // 5

let aDouble: Double = 3.0
let bDouble: Double = 4.0
hypotenuse(aDouble, bDouble)  // 5

6.@autoclosure

infix operator ???
func ???<T>(optional: T? , defaultValue: @autoclosure ()->T) -> T{
    if let value = optional{ return value}
    return defaultValue()
}

let AorB = A() ??? B()
let AorX = A() ??? "X"
上一篇下一篇

猜你喜欢

热点阅读