iOS swift学习之入门详解(枚举和结构)

来源:互联网 发布:wpf编程书籍 编辑:程序博客网 时间:2024/05/16 15:51
enum Rank:Int{    case Ace = 1    case Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten    case Jack,Queen,King    func name()->String{        switch self {        case .Ace:            return "Ace"        case .Jack:            return "Jack"        case .Queen:            return "Queen"        case .King:            return "King"        default:            return String(self.rawValue)        }    }}let aaaa = Rank.Acelet bbbb = Rank(rawValue: 1)let cccc = aaaa.rawValueprint(aaaa.name())此枚举的原始数据类型为Int,只需要指定枚举中首项(case)的值,后面的case的值会以依次增加的方式自动推算出来。你也可以将浮点或字符串作为枚举的原始数据类型。用rawValue属性来取得某个枚举case的原始值。使用初始化方法 init?(rawValue:)(带个“?”表示返回的结果可能是nil) 可以从一个原始值创建一个枚举实例。比如上面的bbbb。算式aaaa==bbbb的结果会是true(Swift中的Bool型的值是true和false,而不是YES和NO)。一个枚举各case的值都是真实的值,并不是用于表示原始值的另外一种写法,如果某个case没有有意义的原始值,就不要提供它。下面这个枚举定义了扑克的花色:enum Suit{    case Spades,Hearts,Diamonds,Clubs    func name()->String{        switch self{        case Suit.Spades:            return "Spades"        case .Hearts:            return "Heart"        case .Diamonds:            return "Diamonds"        case .Clubs:            return "Clubs"        }    }}let hearts = Suit.Hearts我们可以看到switch语句里,枚举项的访问可以省掉前面的类型名,这个得看情况,只有能推断出来的时候才可以省略,省略时只要一个点就可以了。枚举的一个case实例可以带上附加的数据。同一个case的不同实例可以带着不同的附加数据。附加数据与原始数据不一样,同一个case的不同实例,它们的原始数据都一样,并且原始数据是在定义枚举时就定死了。例如,从服务器获取日出和日落时间。服务器可以返回时间或返回错误信息,定义一个枚举:enum ServerResponse{    case Result(String,String)    case Error(String)}let success = ServerResponse.Result("6:00 am", "8:09 pm")let failure = ServerResponse.Error("Out of cheese.")switch success{case let .Result(sunrise,sunset):    print("Sunrise is at \(sunrise) and sunset is at \(sunset).")case let .Error(error):    print("Failuer ... \(error)")}上面的使用方式看起来好奇怪。这个switch的执行结果是“Sunrise is at 6:00 am and sunset is at 8:09 pm”。当switch 后面是常量failure时,输出就是“Failuer … Out of cheese.” 。case let .Result(sunrise,sunset)相当于case let ServerResponse.Result(sunrise,sunset),把ServerResponse省掉了,此处是构建一个Result case,let 使得参数sunrise和sunset从success这个case实例里获取附加数据。- 结构结构跟类一样,有属性有方法有构造方法。主要的区别是在赋值时结构是复制,而类是传引用,其余就是一点语法上无关紧要的小差别。比如:struct Card {    var rank = Rank.Queen    let suit:Suit}var card = Card(rank:Rank.Ace,suit:Suit.Hearts)
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 行驶证过期了3年怎么办 行驶证过期没审怎么办 行驶证过期两年怎么办 驾驶证过期7年了怎么办 换驾照过一个月怎么办? 行驶证正本掉了怎么办 车的行驶证丢了怎么办 三星s6 屏幕坏了怎么办 手机摔成黑屏了怎么办 三星屏幕漏液了怎么办 三星s8屏幕漏液怎么办 屏幕紫色漏液了怎么办 华为手机屏碎了怎么办 小米2s按键失灵怎么办 魅蓝屏幕摔花了怎么办 小米手机屏碎了怎么办 厦门医保卡坏了怎么办 医保卡丢了北京怎么办 重庆社保卡丢了怎么办 沈阳医保卡丢了怎么办 小孩医保卡丢了怎么办 少儿医保卡丢了怎么办 孩子医保卡丢了怎么办 医保卡存折丢了怎么办 济宁医保卡丢了怎么办 大连医保卡丢了怎么办 职工医保卡丢了怎么办 太原医保卡丢了怎么办 南京医保卡丢了怎么办 苏州医保卡丢了怎么办 我的医保卡丢了怎么办 医保卡丢了怎么办出院 住院医保卡丢了怎么办 社会医保卡丢了怎么办 医保本丢了,住院怎么办 临时医保卡丢了怎么办 没带医保卡看病怎么办 居民医保卡掉了怎么办 福建医保卡坏了怎么办 大庆医保卡丢了怎么办 坐的士丢了东西怎么办