Swift学习笔记(5)—— 控制流

switch的差距还是挺大的。


5.控制流

简单的for循环、while循环、do-while循环 跟C或JAVA类似

for-in 循环

  • 可以遍历区间、集合、字符串等
  • 不需要每一项值的话,可以用_代替

if、if-else跟C或JAVA类似

if条件可以用一个可选类型值做条件,为nil时相当于false.

switch

  • 支持的类型比C或JAVA多。
  • 不需要break——默认匹配到一个case之后就会停止。
  • 一个case分支可以写多个匹配的值。
  • 一个case分支可以匹配一个区间。
  • 可以要使用fallthrough显示声明需要穿透——匹配到一个case之后继续匹配其他的case。
  • 可以使用元组值,使用元组时,case的每一个元组元素值都可以是区间,或者用_匹配所有值。
  • 允许多个case匹配相同的值,但默认情况下,只有第一个case语句会被执行,参见第2条
  • 值绑定:在case语句中使用var或者let将匹配到的值存入变量或常量,作用域为当前case。
  • case中可以使用where来匹配满足某些条件—— 跟SQL学的?!


这笔记只是给我自己看的,用以标记一些我觉得需要记的或者有意思的一些知识点,有很多我觉得没必须要赘述的东西就没记,所以是不系统的,只作提示用。
感谢 numbbbbb以及其他贡献者: https://github.com/numbbbbb/the-swift-programming-language-in-chinese
当然,还有英文页: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-XID_70


http://www.barryzhang.com/archives/240

Swift学习笔记(4)—— 集合类型

Swift的集合类型有Array数组Dictionaries字典两种。

Swift的Array类似于JAVA的Array和List的结合;
Dictionaries类似JAVA的Map(当然也有很大的不同)


4.集合类型

类型推导

相同类型元素的数组会被自动推导类型。
所以下面的两行是等价的:

var array1 : String[] = ["aa","bb"]
var array2 = ["aa","bb"]

访问和修改数组

访问

  • .isEmpty判断是否为空
  • .count获取长度

    array1.isEmpty  //false
    array2.count    //2
    
  • 遍历:for-in循环

添加

  • .appent(newItem)添加一个元素
  • 使用+=添加一个元素
  • 使用+=添加数组
  • .insert(newItem, atIndex:insex):

    array1.append("cc") 
    //变更为 ["aa", "bb", "cc"]
    array1 += "dd"  
    //变更为 ["aa", "bb", "cc", "dd"]
    array1 += ["ee","ff"]
    //变更为 ["aa", "bb", "cc", "dd","ee","ff"]
    array1.insert("xx",atIndex:1)
    //变更为 ["aa","xx", "bb", "cc", "dd","ee","ff"]
    
  • 范围赋值

移除

  • .removeAtIndex(index)移除指定
  • .removeLast()移除最后

    array1.removeAtIndex(1);
    //变更为 ["aa", "bb", "cc", "dd","ee","ff"]
    array1.removeLast();
    //变更为 ["aa", "bb", "cc", "dd","ee"]
    

创建和初始化数组

var a2 = Int[]()    //空
var a3 : Int[] =[]  //空
var a4 = [1,3]      //[1,3]
var a5 = a4         //[1,3]
var a6 = Array(count : 3 , repeatedValue: "a")//["aa","aa","aa"]

字典的类型推导

访问和修改字典

d[key] = newValue // d[key] 存在的话则更新,不存在的话则会插入一个值
d.updateVaule(newValue,forKey:key)// key-newValue,更新或新建

遍历词典

可以遍历词典的key和value:

for (key, vaule) in d{
    println("key: \(key), value:\(value)")
}

或者只遍历key:

for key in d1.keys{ 
    println("key :\(key)")
}

创建一个空字典

var d1 = Dictionary<String,String>()// 创建一个空的字典
d1["key1"] = "value1"
d1 = [:]                           // 重新设为空


这笔记只是给我自己看的,用以标记一些我觉得需要记的或者有意思的一些知识点,有很多我觉得没必须要赘述的东西就没记,所以是不系统的,只作提示用。
感谢 numbbbbb以及其他贡献者: https://github.com/numbbbbb/the-swift-programming-language-in-chinese
当然,还有英文页: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-XID_70


http://www.barryzhang.com/archives/236

Swift学习笔记(3)—— 字符串和字符

跟JAVA类似。


3.字符串和字符

初始化空字符串

//等价的两条语句
var emptyString = ""
var emptyString2 = String()  

判断是否为空

.isEmpty()

字符串是值类型

进行常量、变量的赋值、传递等操作时,都会进行拷贝。
区别于指针类型

计算字符串字符数量

countElements(String)函数
注意事项:由于编码等差异,字符数量并不总是等于(其他语言中)length属性的值!

字符串插值

使用\(value)的形式在字符串中插入变量。

var intValue = 3
println("intValue is \(intValue)!")//输出 intValue is 3!
println("intValue is \(intValue*2)!")//输出 intValue is 6!

字符串比较

==直接比较相等

前缀/后缀 hasPrefix/hasSuffix

类似于JAVA的startWith/endWith

大小写转换 uppercaseString/lowercaseString

类似于JAVA的toUpcase/toLowerCase()

Unicode

或者字符串的unicode表示: .utf8.utf16

for c in strvalue.utf8{
        print("\(c) ")
}//结果为 97 98 99


这笔记只是给我自己看的,用以标记一些我觉得需要记的或者有意思的一些知识点,有很多我觉得没必须要赘述的东西就没记,所以是不系统的,只作提示用。
感谢 numbbbbb以及其他贡献者: https://github.com/numbbbbb/the-swift-programming-language-in-chinese
当然,还有英文页: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-XID_70


http://www.barryzhang.com/archives/233

Swift学习笔记(2)—— 基础运算符

有一些运算符还是跟JAVA有一些小区别的,比如区间运算符。


2.基础运算符

%取余运算支持浮点数

println(5.1 % 2)//结果是 3.1
println(5 % 2.1) //结果是 0.8

+加法运算符可以进行字符串拼接

两个Character类型进行+运算,结果是String类型。

区间运算符

闭区间...

for i in 1..5{print(i)} //输出 12345

半闭区间..

for i in 1..5{print(i)} //输出 1234


这笔记只是给我自己看的,用以标记一些我觉得需要记的或者有意思的一些知识点,有很多我觉得没必须要赘述的东西就没记,所以是不系统的,只作提示用。
感谢 numbbbbb以及其他贡献者: https://github.com/numbbbbb/the-swift-programming-language-in-chinese
当然,还有英文页: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-XID_70


http://www.barryzhang.com/archives/230

Swift学习笔记(1)—— 基础部分

准备学习一Swift了……从基础语法开始。

1.基础部分

可选

声明类型时加上?表示可选。
比如var i: Int?表示i的值为Int类型或者nil

强解析

使用!表示强解析:强制使用可选类型的值而非nil

可选绑定

if直接可以判断一个可选类型是否有值。
使用iflet,可以使:如果有值,就赋给一个变量(临时变量)

if let constantName = someOptional {
    statements
}                   
//这段代码表示:如果可选类型的变量someOptional有值,就赋给constantName,并且执行statements语句。  

隐式解析可选

声明类型时使用表示隐式解析可选。 好处是使用变量是不用再使用!进行强解析,而是默认就进行强解析。
下面的代码意思一样,分别是使用和没使用隐式解析可选的样子:

let possibleString: String? = "An optional string."
println(possibleString!) // 需要惊叹号来获取值
// 输出 "An optional string."

let assumedString: String! = "An implicitly unwrapped optional string."
println(assumedString)  // 不需要惊叹号
// 输出 "An implicitly unwrapped optional string."

断言

使用断言来进行调试。
使得某些条件不满足的时候终止代码的运行。

assert(age >= 0)//当age>=0不能满足时,终止
assert(age >= 0, "A person's age cannot be less than zero")//或者可以加一条消息


这笔记只是给我自己看的,用以标记一些我觉得需要记的或者有意思的一些知识点,有很多我觉得没必须要赘述的东西就没记,所以是不系统的,只作提示用。
感谢 numbbbbb以及其他贡献者:
https://github.com/numbbbbb/the-swift-programming-language-in-chinese
当然,还有英文页: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-XID_70


http://www.barryzhang.com/archives/228