swift学习日记(十) 类型转换 类型嵌套
2015-12-19 19:46
357 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013418097/article/details/50359446
is可以看作是一个二元操作符,其返回true 或false
2,Any和AnyObject的类型检查
其实这个昨天就写好了,今天才发
预告:这几天在写大作业,可能无法保持每天一更,尽量有空就看看
一,类型检查
这个可以说是借鉴java的了
语法非常简单
var num:Int = 1; print(num is Int)
is可以看作是一个二元操作符,其返回true 或false
其作用是判断某个变量是否为某个类型
1,向下转型
as
看到这个语法,顾名思义,应该想得到这是把一个变量转换成其它类型来用,主要是用来转型成子类
语法有两种形式,as? 和 as
带?是可选形式,如果下转不成功,将返回nil,以便检查是否成功
as是强制下转,当不成功时,将触发runtime error
for item in library { if let movie = item as? Movie { println("Movie: '\(movie.name)', dir. \(movie.director)") } else if let song = item as? Song { println("Song: '\(song.name)', by \(song.artist)") } } // Movie: 'Casablanca', dir. Michael Curtiz // Song: 'Blue Suede Shoes', by Elvis Presley // Movie: 'Citizen Kane', dir. Orson Welles // Song: 'The One And Only', by Chesney Hawkes // Song: 'Never Gonna Give You Up', by Rick Astley
2,Any和AnyObject的类型检查
AnyObject将可以指代任何类型的实例
let someObjects: AnyObject[] = [ Movie(name: "2001: A Space Odyssey", director: "Stanley Kubrick"), Movie(name: "Moon", director: "Duncan Jones"), Movie(name: "Alien", director: "Ridley Scott") ]
for movie in someObjects as Movie[] { println("Movie: '\(movie.name)', dir. \(movie.director)") } // Movie: '2001: A Space Odyssey', dir. Stanley Kubrick // Movie: 'Moon', dir. Duncan Jones // Movie: 'Alien', dir. Ridley Scott
与前一个不同,any可以指代任何一个类型,而不是该类型的实例
具体其实也没什么好解释的,看代码理解就行了,通俗易懂
var things = Any[]() things.append(0) things.append(0.0) things.append(42) things.append(3.14159) things.append("hello") things.append((3.0, 5.0)) things.append(Movie(name: "Ghostbusters", director: "Ivan Reitman")) for thing in things { switch thing { case 0 as Int: println("zero as an Int") case 0 as Double: println("zero as a Double") case let someInt as Int: println("an integer value of \(someInt)") case let someDouble as Double where someDouble > 0: println("a positive double value of \(someDouble)") case is Double: println("some other double value that I don't want to print") case let someString as String: println("a string value of \"\(someString)\"") case let (x, y) as (Double, Double): println("an (x, y) point at \(x), \(y)") case let movie as Movie: println("a movie called '\(movie.name)', dir. \(movie.director)") default: println("something else") } } // zero as an Int // zero as a Double // an integer value of 42 // a positive double value of 3.14159 // a string value of "hello" // an (x, y) point at 3.0, 5.0 // a movie called 'Ghostbusters', dir. Ivan Reitman
在一个switch语句的case中使用强制形式的类型检查操作符(as, 而不是 as?)来检查和转换到一个明确的类型。在 switch case 语句的内容中这种检查总是安全的。
二,类型嵌套
这不是新的语法,只是一个新增的说明
swift中,我们可以在一个类/结构体/枚举类型中 嵌套 类/结构体/枚举类型
struct BlackjackCard { // 嵌套定义枚举型Suit enum Suit: Character { case Spades = "♠", Hearts = "♡", Diamonds = "♢", Clubs = "♣" } // 嵌套定义枚举型Rank enum Rank: Int { case Two = 2, Three, Four, Five, Six, Seven, Eight, Nine, Ten case Jack, Queen, King, Ace struct Values { let first: Int, second: Int? } var values: Values { switch self { case .Ace: return Values(first: 1, second: 11) case .Jack, .Queen, .King: return Values(first: 10, second: nil) default: return Values(first: self.toRaw(), second: nil) } } } // BlackjackCard 的属性和方法 let rank: Rank, suit: Suit var description: String { var output = "suit is \(suit.toRaw())," output += " value is \(rank.values.first)" if let second = rank.values.second { output += " or \(second)" } return output } }
let heartsSymbol = BlackjackCard.Suit.Hearts.toRaw()
相关文章推荐
- 解决嵌套list类型的JSONObject/JSONArray转换成原来list问题。
- golang基础-接口、接口嵌套、类型断言、接口与结构体_接口等转换
- <PY>转换类型:嵌套列表的遍历
- python列表嵌套与列表内类型转换
- golang基础-接口、接口嵌套、类型断言、接口与结构体_接口等转换
- String类型的json体转换为json(json嵌套字符串json,嵌套字符串json数组等)转换并解析为需要的json格式
- 多重嵌套点击事件Error:(81, 15) 错误: 不兼容的类型: RelativeLayout无法转换为LinearLayout
- C#基础总结之一变量常量-if嵌套语句-witch结构-类型转换
- Swift学习笔记(十五)类型转换和类型嵌套
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结...
- 基于Struts2的全局类型转换器
- 浮点字符类型的转换成数值类型
- JAVA中int、String的类型转换
- 数据类型之间的转换
- js 变量类型、相互转换
- js学习笔记(三)数据类型转换
- Java初学习 - 枚举类型,整型,字符串之间转换
- java 中 map.get(key) 的类型转换
- python基础:string和bytes数据类型之间的转换
- mybatis数据库与java类型转换