美文网首页
Swift新技巧

Swift新技巧

作者: 狂奔的胖蜗牛 | 来源:发表于2018-06-22 09:52 被阅读17次

    1.让函数参数是某个类型同时遵循某些协议

    使用&连接即可。

    protocol P {}
    protocol P1 {}
    class App {}
    func fun(content: App & P & P1){}
    

    2.协议的扩展可以为某个类型提供默认属性值

    //定义协议P
    protocol P {
        var value: Int { get }
    }
    //扩展协议,同时为遵循该协议的UIView类型提供一个默认属性值
    extension P where Self: UIView {
        var value: Int {
            return 10
        }
    }
    //只要UIView遵循了该协议,就会有一个默认值10
    class My: UIView, P {}
    let my = My()
    print(my.value)
    

    3.检查所有集合是否满足某一个条件

    Swift4.2新推出的方法allSatisfy()能够检查一个集合的所有元素是否满足某个条件,全部满足就返回true,否则就是false。

    let scores = [1, 2, 3, 4]
    let result = scores.allSatisfy { $0 >= 5 }
    if result {
        print("都满足")
    }else {
        print("至少一个不满足")
    }
    

    4解构元组

    将元组拆分出来。

    func getUser() -> (name: String, password: String) {
        return ("apple", "123456")
    }
    //方式一
    let result = getUser()
    print(result.name+":"+result.password)
    //方式二
    let (username, password) = getUser()
    print(username+":"+password)
    //方式三
    let (u, p) = result
    print(u+":"+p)
    

    5.溢出运算符

    为了确保安全,Swift的数据,如果超出类型大小限制,会自动崩溃。比如下面就会崩溃:

    let highScore = Int8.max
    let newHighScore = highScore + 1
    

    使用了溢出运算符,如果超出范围,Swift就会绕回最小值,而不是崩溃。

    let highNumber = UInt8.max
    let nextNumber = highNumber &+ 1
    

    6.设置属性外部只读,内部可读写。

    struct Bank {
        public private(set) var address: String
    }
    

    7.结构体逐一成员初始化和自定义初始化

    结构体有默认的逐一成员初始化

    struct Score {
        var player: String
        var score: Int
    }
      
    let highScore = Score(player: "twostraws", score: 556)
    

    可以自定义该方法,如果自定义,默认的就会失效。

    如果想要默认的还能生效,又想自定义,那么就需要把自定义的方法写入扩展中。

    struct Score {
        var player: String
        var score: Int
    }
      
    extension Score {
        init(player: String) {
            self.player = player
            score = 0
        }
    }
      
    // 现在它们都可用了
    let highScore1 = Score(player: "twostraws", score: 0)
    let highScore2 = Score(player: "twostraws")
    

    8.static和class属性

    Swift中的类属性可以用2种关键词创建:static 和 class。它们都能让一个类中所有实例共享某个属性,但static意味着final,即无法在子类中被覆盖。

    9.==和===

    ==运算符用于检测两个Equatable类型是否相等。
    ===用于检查一个类中的2个实例是否指向同一段内存地址。

    10.numericCast()函数

    该函数可以自动将整型转换为需要的类型。

    func fun(value: Float64) {}
    let a: Int = 10
    fun(value: numericCast(a))
    

    相关文章

      网友评论

          本文标题:Swift新技巧

          本文链接:https://www.haomeiwen.com/subject/gvwhyftx.html