Swift 系统学习 30 枚举 结构体 类 遵循协议 protocol

原创 2017年03月01日 15:28:18
//: Playground - noun: a place where people can play

import UIKit

/*
 * 本节主要内容:
 * 1.枚举 / 结构体 / 类遵循协议
 */

protocol Togglable {
    mutating func toggle() // 没有大括号
}

// OnOffSwitch枚举类型遵循了Togglable协议
enum OnOffSwitch: Togglable {
    case Off
    case On
    
    mutating func toggle() {
        switch self {
        case .Off:
            self = .On
        case .On:
            self = .Off
        }
    }
}
var switchOne = OnOffSwitch.On

var array: Array<Int> = []
protocol FullNamed {
    // 属性: var + 类型 + get / get set
    var fullName: String { get } // { get set }
    // 自定义方法
    func randomValue() -> Int
    // 类型方法(和类型属性对应)
    static func someTypeMethod()
    // mutating关键词的方法
    mutating func changeName(newName: String)
}
struct Person: FullNamed {
    // ***如果协议的属性是只读, 结构体遵循协议, 属性没有任何要求
     // 存储属性
    var fullName: String {
        get {
            return ""
        }
        set {
            
        }
    }
    var firstName: String?
    func randomValue() -> Int {
        return Int(arc4random()%50)
    }
    static func someTypeMethod() {
         print("Call the someTypeMethod.")
    }
    mutating func changeName(newName: String) {
        fullName = newName
    }
}
Person.someTypeMethod()


protocol Pet {
    var name: String { get set }
    var birthPlace: String { get }
    func playWith()
    func fedWith(food: String)
    func changeName(newName: String)
}

// class Dog: SuperClass, ProtocolName
class Dog: Pet {
    private var myDoggyName = "Puppy"
    var name: String {
        get { return myDoggyName  }
        set { myDoggyName = newValue }
    }
    
    var birthPlace: String = "Beijing"
    func playWith() {
        print("Play with it for a while.")
    }
    func fedWith(food: String = "Bone") {
        if food == "Bone" {
            print("Happy")
        } else {
            print("Unhapy")
        }
    }
    func changeName(newName: String) {
        name = newName
    }
}


/*
 * 思考问题: 假设没有声明Pet宠物协议; 声明Pet类, 让dog类继承于Pet
 */





import UIKit

/*
 * 本节内容: 实现笔记中的流程图
 */

protocol Pet {
    var name: String { get set }
}

protocol Flyable {
    var flySpeed: Double { get }
    var flyHeight: Double { get }
}

class Animal {
    
}
class Dog: Animal, Pet {
    var name: String = "Puppy"
}
class Cat: Animal, Pet {
    var name: String = "Kitty"
}
class Bird: Animal, Flyable {
    var flySpeed: Double
    var flyHeight: Double
    init(flySpeed: Double, flyHeight: Double) {
        self.flySpeed  = flySpeed
        self.flyHeight = flyHeight
    }
}
class Parrot: Bird, Pet {
    var name: String
    init(name: String, flySpeed: Double, flyHeight: Double) {
        self.name = name
        super.init(flySpeed: flySpeed, flyHeight: flyHeight)
    }
}
class Sparrow: Bird {
    var color = UIColor.gray
}

class Vehicle {
    
}
class Plane: Vehicle, Flyable {
    var flySpeed: Double
    var flyHeight: Double
    init(flySpeed: Double, flyHeight: Double) {
        self.flySpeed  = flySpeed
        self.flyHeight = flyHeight
    }
}









版权声明:本文为博主原创文章,未经博主允许不得转载。本文针对于有一定Objective-C语言基础的人群,听说面试的时候要博客,然后就整理了一点资料发出来, 共同学习!!

【Swift学习笔记00】——enumeration枚举类型遵循协议protocol

Apple官方文档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Pr...
  • duanyipeng
  • duanyipeng
  • 2014年06月19日 19:54
  • 4638

Swift 类,结构体,枚举使用总结

类,结构体,枚举既有相同之处,也有不同之处. 相同之处在于: 1:都可以通过定义不同的属性来保存自己的数据. 2:都可以通过定义方法来实现不同的功能. 3:都可以在定义下标方法后,通过下标方法的语法...
  • longshihua
  • longshihua
  • 2016年01月27日 19:45
  • 655

swift的枚举、结构体、协议和延展

1、枚举 如果枚举为Int类型 ,那么该枚举就会有rawValueenum Rank :Int{ case Ace = 1 case Two ,Three,Four,Five,...
  • ilai2015
  • ilai2015
  • 2015年10月06日 16:20
  • 833

Swift3.0- 协议(protocol)

Swift3.0- 协议(protocol)代理,委托 /* * Protocol协议 (接口Interface或者纯虚函数) 协议用于统一方法和属性的名称,而不实现任何功能(使用代理设计模式...
  • MinggeQingchun
  • MinggeQingchun
  • 2017年01月18日 22:20
  • 1971

Swift详解之六----------------枚举、结构体、类

枚举、结构体、类注:本文为作者自己总结,过于基础的就不再赘述 ,都是亲自测试的结果。如有错误或者遗漏的地方,欢迎指正,一起学习。1、枚举枚举是用来定义一组通用类型的一组相关值 ,关键字enum ,ca...
  • u010586842
  • u010586842
  • 2015年08月22日 21:04
  • 1481

iOS经典讲解之Swift枚举(Enum)、协议(protocol)、扩展(Extension)

作者:Loving_iOS 转载请标明出处: 本次开发环境为Xcode7.0.1 创建playground文件 进行的代码编写。 //**********************枚举*********...
  • Loving_iOS
  • Loving_iOS
  • 2015年10月25日 21:19
  • 1097

Swift 协议(十八)

协议 (Protocols) 用于统一方法和属性的名称,而不实现任何功能,能够被类、枚举、结构体实现,满足协议要求的都成为协议的遵循者,遵循者需要提供协议指定的成员,如方法,属性,操作符,下标。...
  • huangchentao
  • huangchentao
  • 2014年06月20日 17:28
  • 5379

Swift的协议默认实现

继承和组合的缺点 带默认实现的协议 小结继承和组合的缺点在开发工作中,继承总是用来在多个类之间共享代码。 设想一个场景,一个人类,可以说话和睡觉,而一个Worker,除了上述功能,还可以工作。 解...
  • xsl_bj
  • xsl_bj
  • 2016年05月09日 11:52
  • 3261

Swift之协议

前言如果你之前使用objective-c编写iOS程序肯定对协议都不陌生,在Swift中苹果将protocol这种语法发扬的更加深入和彻底。Swift中的protocol不仅能定义方法还能定义属性,配...
  • u014795020
  • u014795020
  • 2017年05月07日 22:08
  • 758

Swift结构体与类

在面向过程的编程语言(如C语言)中,结构体用得比较多,但是面向对象之后,如在C++和Objective-C中,结构体已经很少使用了。这是因为结构体能够做的事情,类完全可以取而代之。而Swift语言却非...
  • tonny_guan
  • tonny_guan
  • 2014年08月30日 20:14
  • 5712
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift 系统学习 30 枚举 结构体 类 遵循协议 protocol
举报原因:
原因补充:

(最多只允许输入30个字)