美文网首页
Swift 日积月累

Swift 日积月累

作者: Neal_f | 来源:发表于2018-03-30 02:25 被阅读0次

    1.将protocol的方法申明为 mutating:

    • mutating关键字用于修饰protocol中的方法

    • 在Swift中protocol不仅可以被class遵守,还可以被struct、enum实现,protocol中的方法前面加入了该关键字,那么在该方法的实现中可以修改struct和enum中的成员变量,如果协议方法里没有写mutating,别人用的话就不能在方法里改变自己的变量了。在class中是默认可以修改的

    //1.将protocol的方法申明为mutating
    /*
     mutating 关键字修饰方法是为了能在该方法中修改struct或是enum的变量
     */
    protocol Vehicle {
        
        var numberofWheels: Int {get}
        var color: UIColor {get set}
        
        mutating func changeColor(_ color: UIColor)
    }
    
    struct Mycar: Vehicle {
    
        let numberofWheels = 4
        
        var color: UIColor = UIColor.blue
        
        mutating func changeColor(_ color: UIColor) {
            self.color = color
        }
        
    }
    

    2. Sequence

    //先定义了一个实现了IteratorProtocol 协议的类型
    //IteratorProtocol 需要指定一个typealias Element
    //以及提供一个返回 Elemnt? 的方法 next()
    
    //实现一个反向的iterator和sequence
    class ReverseIterator<T>: IteratorProtocol {
        typealias Element = T
        var array: [Element]
        var  currentIndex = 0
        init(array: [Element]) {
            self.array = array
            currentIndex = array.count - 1
        }
        
        func next() -> Element? {
            guard currentIndex >= 0 else {
                return nil
            }
            
            let element = array[currentIndex]
            currentIndex -= 1
            return element
            
        }
    }
    
    //定义Sequence
    //指定一个typealias Iterator
    //以及提供一个返回Iterator?的方法 makeIterator
    
    struct ReverseSequence<T>: Sequence {
        var array: [T]
        init(array: [T]) {
            self.array = array
        }
        
        typealias Iterator = ReverseIterator<T>
        
        func makeIterator() -> ReverseIterator<T> {
            return ReverseIterator(array: self.array)
        }
    }
    
    let arr = [0,1,2,3,4]
    for i in ReverseSequence(array: arr) {
        print("Index: \(i) is \(arr[i])")
    }
    

    相关文章

      网友评论

          本文标题:Swift 日积月累

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