码迷,mamicode.com
首页 > 编程语言 > 详细

Swift学习笔记- 1.基础部分

时间:2015-02-15 20:31:08      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

数值类型转换
 
浮点型:如果没有显式指定类型为 float,swift 会推断为 Double
 
整数转换
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne: UInt16 = twoThousand + UInt16(one)
 
转换格式:类型(变量)是调用 Swift 构造器并传入一个初始值的默认方法。UInt16 中有一个构造器,可以接受一个 UInt8 类型的值,所以这个构造器可以用现有的 UInt8 来创建一个新的 UInt16。注意,并不定传入任意类型的值,只能闯入 UInt16内部有对应构造器的值。不过可以扩展现有的类型来让它可以接受其他类型的值(包括自定义类型)。
 
整数和浮点数转换
整数和浮点数的转换必须显式指定类型:
 
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
 
反向转换同样可以,
 
let integerPi = Int(pi)
 
 
类型别名
类型别名就是给现有类型定义另一个名字。可以使用 typealias 关键字来定义类型别名
 
typealias AudioSampe = UInt16

var maxAmtlitudeFound = AudioSampe.min
 
布尔值
布尔类型 Bool, true 和 false
 
如果你在需要使用 Bool 类型的地方使用了非布尔值,swift 会报错
 
let i = 1
if i {
    //会报错
}
 
正确用法
let i = 1
if i == 1 {
    //合法
}
 
元组
元组(tuples)把多个值合成一个复合值。元组内的值可以使任意类型,并不要求相同类型
let http404Error = (404, "Not Found")
 
你可以把任意顺序的类型组合成一个元组,元组可以包含所有类型,你可以创建一个类型为(Int, Int, Int)或(String, Bool)或其他你想要的元组。
 
 
使用方式
(1)你可以将一个元组的内容分解成单独的常量和变量
let (statusCode, statusMessage) = http404Error
 
(2)如果你只想要一部分元组值,分解的时候可以把要忽略的部分用下划线(_)标记
let (justTheStatsCode, _) = http404Error
 
(3)你还可以通过下标来访问元组中的单个元素,下标从0开始
println(http404Error.0)
println(http404Error.1)
 
(4)你可以在定义元组时给单个元素命名
let http200Status = (statusCode:200, description:"OK)
 
(5)给元组中的元素命名后,可以通过名字来获取这些元素的值
println(http200Status.statusCode)
println(http200Status.description)
 
作为函数返回值时,元组非常有用
 
注意:
元组在临时组织值的时候很有用,但是并不适合穿件复杂的数据结构。如果并不是临时使用,请使用 类 或 结构体。
 
 
 
可选类型
使用可选类型(optionals)来处理值可能缺失的情况。
可选类型表示为: 有值,等于x 或 没有值
 
let possibleNumber = "123"
let convertedNumber = possibleNumber.toInt()
 
toInt方法返回一个可选类型的 Int,可选 Int 被写作 Int?而不是 Int
 
if 语句以及强制解析
你可以使用 if 语句来判断一个可选是否包含值。
当确定可选类型包含值之后,可以在可选的名字后面加一个感叹号(!)来获取值。这称为可选值的强制解析。
 
if (convertedNumber != nil) {
    println("\(possibleNumber) has an integer value fo \(convertedNumber!)")
} else {
    println("\(possibleNumber) could not be converted to an integer")
}
 
注意:
使用 ! 来获取一个不存在的可选值会导致运行时错误。使用 !来强制解析值之前,一定要确定可选包包含一个非 nil 的值
 
可选绑定
使用可选绑定来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在 if 或者 while 语句中来对可选类型的值进行判断并把值赋给一个常量或变量。
 
if let constantName = someOptional {
    statements
}
 
上面的例子可以写成:
if let actualNumber = possibleNumber.toInt() {
    println("\(possibleNumber) has an integer value of \(actualNumber)")
} else {
    println("\(possibleNumber) could not be converted to an integer")
}
 
可以在可选绑定中使用常量和变量。如果你像在 if 语句的第一个分支中操作 actualNumber 的值,可以改成 if var actualNumber,这样可选类型包含的值就会被赋给一个变量而非变量。
 
nil
你可以给可选变量赋值为 nil 来表示它没有值:
 
var serverResponseCode: Int? = 404
serverResponseCode = nil
 
注意:
nil 不能用于非可选的常量和变量。如果有常量或者变量需要处理值确实的情况, 请把它们声明成对应的可选类型。
 
如果你声明一个可选常量或者变量但是没有赋值,它们会自动被设置为 nil:
var surverAnswer: String?
 
swift 中的nil 和 OC的nil并不一样。在 OC 中,nil 一个指向不存在对象的指针。
在 swift 中,nil 不是指针,他是一个确定的值,用来表示值缺失。任何类型的都可以被设置为 nil,不只是对象类型。
 
隐式可选类型
可选类型暗示了常量或变量可以没有值。可选可以通过 if 语句来判断是否有值,如果有值的花可以通过可选绑定来解析值。
 
在有些时候,第一次被赋值之后,可以确定一个可选类型总会有值。这种情况下,每次判断和解析是非常低效的,因为它总是有值。
这种类型的可选状态被定义为 隐式解析可选类型,(type!)      例如:(String!)
 
当上述情况发生时,隐式解析可选类型非常有用。主要被用在 swift 类的构造过程中,(参考类实例之间的循环强引用)
 
一个隐式解析可选类型其实就是一个普通的可选类型,但是可以被当做非可选类型使用,并不需要每次都使用解析来获取可选值。
 
可选类型和隐式解析可选类型之间的区别:
 
let possibleString: String? = "An optional string"
println(possibleString!)

let assumedString: String! = "An implicity unwrapped optional string"
println(assumedString)
 
你可以把隐式解析可选类型当作一个可以自动解析的可选类型,你要做的只是把 !放到类型的结尾,而不是每次取值的可选名字的结尾。
 
注意:
如果你在隐式解析可选类型没有值的时候尝试取值,会触发运行时错误。和在没有值的普通可选类型后加 ! 是一样的
 
 
 
你仍然可以把隐式解析可选类型当做普通可选类型来判断它是否包含:
if (assumedString != nil) {
    println(assumedString)
}
 
你也可以在可选绑定中使用隐式可选类型来检查并解析它的值
if let definiteString = assumedString {
    println(definiteString)
}
 
注意:
如果一个变量之后可能变成 nil 的话,请不要使用隐式将隐式可选类型,如果你需要在变量的生命周期中判断是否是 nil 的话,请使用普通通可选类型
 
断言
可选类型可以让你判断值是否存在,你可以在代码中处理值缺失的情况。然而,在某些情况下,如果值缺失或者值并不满足特定的条件,你的代码可能并不需要继续执行。这时,你可以在你的代码中触发一个断言(assertion)来结束代码云并通过调试找到值缺失的原因。
 
使用断言进行调试
断言会在运行时判断一个逻辑条件是否为 true。使用断言来保证在运行其他代码之前,某些重要的条件已经被满足。如果为 true,继续运行,否则停止。
 
如果你的代码触发了一个断言,你可以清楚的看到不合法的状态发生在哪里并检查断言被出发时你的应用的状态。此外,断言允许你附加一条调试信息。
 
你可以使用全局 assert 函数写一个断言。向 assert 函数传入一个结果为 true 或 false 的表达式以及一条信息,当为 false 时会显示这条信息:
 
let age = -3
assert(age >= 0, "A person‘s age cannot be less than zero)
 
当 age < 0时,断言被触发,结束应用
 
合适使用断言
当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运行。
 
断言的使用场景:
  • 整数的附属脚本索引被传入一个自定义附属脚本实现,但是下标索引值可能太小或者太大。
  • 需要给函数传入一个值,但是非法的值可能导致函数不能正常运行。
  • 一个可选值现在是 nil,但是后面的代码运行需要一个非 nil 值。
注意:断言可能导致你的应用终止运行,所以你应当仔细设计你的代码来让非法条件不会出现。然而,在你的应用发布之前,有时候非法条件可能出现,这时使用断言可以快速发现问题。
 
 

Swift学习笔记- 1.基础部分

标签:

原文地址:http://www.cnblogs.com/kangshang/p/4293434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!