美文网首页
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 日积月累

    1.将protocol的方法申明为 mutating: mutating关键字用于修饰protocol中的方法 在...

  • 日积月累

    一滴水固然渺小,但千万滴乃至十亿滴凝聚成的力量却是我们不可小视的。石“穿”对人类来说,办到它是轻而易举的...

  • 日积月累

    今天认真听了日拱一卒的启动仪式的录音,觉得每天坚持一个事情,天天坚持是很难做到,有时候确实需要逼自己一把。 最近时...

  • 日积月累

    到底是意志力够强,形成了自己的习惯;还是习惯够好,才显得意志力够强呢? 比自控力或者意志力更能够影响你...

  • 日积月累

    久久 2017-6-19 20:59 “总有人在你刷手机的时候读书、背单词、健身跑步,缩短自己与梦想的距离。” 昨...

  • 日积月累

    2018年 3月27 星期二 晴 我是日记星球444号星宝宝李庆龙,正在参加日记星球第15期21天蜕变之旅,这是...

  • 日积月累

    世界上只有一种真正的英雄主义,就是认清生活的真相后还依然热爱它。 ——...

  • 日积月累

    你想要的,岁月凭什么给你? 所有逆袭,都是沉默地有备而来。 所有光芒,需要时间才能被看到。 所有幸运,都是努力埋下...

  • 日积月累

    为什么要这么写呢?一年的时间来完成任务,每每想不到怎么写的东西通过网络平台和浏览链接得出的文章,这过程中给自己增加...

  • 日积月累

    人生充满坎坷和荆棘,面对挫折,懦弱之辈选择了放弃;而强者却义无反顾地选择面对,用顽强的毅力去攻克重重难关,一步步走...

网友评论

      本文标题:Swift 日积月累

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