swift基础学习

1、常量与变量的声明

  • let:常量 var:变量
  • 在声明常量和变量时,可以使用注解来注明该变量或常量的类型。eg:var welcomeMessage:String
  • 实际编程中很少使用类型注解,因为在初始化常量或者和变量的时候swift已经根据初始化的值确定了类型信息。(隐式的确定变量或常量类型)
  • Swift是一种类型安全的语言,所谓的安全就是说在编程的时候需要清楚变量的类型,它会在编译的时候检查你的代码,任何类型不匹配时都会报错。

2、输出常量或者变量

println全局函数,自带换行

3、分号

Swift不需要使用分号;来分隔每个语句。当然也分号也可以使用。

4、类型别名

类型别名为现有类型定义的可替代名称。可以使用typealias关键字定义类型别名。类型别名可以帮助我们使用更符合上下文语境的名字来指代一个已存在的类型。
eg:typealias AudioSample = UInt16

5、元祖类型

  • 元祖类型可以将一些不同的数据类型组装成一个元素,这些数据类型可以是任意类型,并且不需要是同样的类型。
let http404Error = (404,"Not Found")
let (statusCode,statusMessage) = http404Error
// statusCode = 404,statusMessage = "Not Found"

// 如果仅需要元组中的个别值,可以使用(_)来忽略不要要的值
let (justTheStatusCode,_) = http404Error

// 也可以使用元素序号来选择元组中的值,注意序号是从0开始的
println("The status code is \(http404Error.0)")
// prints "The status code is 404"
println("The status message is \(http404Error.1)")
// prints "The status message is Not Found"

6、可选类型

  • ?:表示可选类型
  • 在一个值可能不存在的时候,可以使用可选类型。这种类型的定义是:这个值要么存在,并且是什么类型的值,要么这个值不存在。

7、强制解析(强制解包)

  • !:表示强制解析
  • 意思是告诉编译器,这个值存在,可以使用它了。

8、nil

  • 如果定义了一个可选类型并且没有给予初始值的时候,会默认设置为nil。
  • 注意:Swift的nil不同于OC中的nil,在OC中nil是一个指针指向不存在的对象。Swift中,nil不是指正而是一个特定类型的空值。任何类型的可选变量都可以被设为nil。

9、断言

  • assert()函数表示断言调试。
  • 断言是一种实时检测条件是否为true的方法,也就是说,断言假定条件为true。断言保证了后续代码的执行依赖于条件的成立。如果条件满足,那么代码继续执行,如果这个条件为false,那么代码将会中断执行。
let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// this causes the assertion to trigger, because age is not >= 0

当前一个条件返回false的时候,后面的错误日志将会输出。

  • 注意:断言会导致程序运行的中止,所以如果异常时预期可能发生的,那么断言是不合适的。断言保证错误在开发过程中会被发现,发布的应用里最好不要使用。

10、 字符串与字符

  • 通过isEmpty属性可以检查一个字符串是否为空
var emptyString = ""
if emptyString.isEmpty {
println("Nothing to see here")
}
// prints "Nothing to see here"
  • Swift的字符串String就是由字符Character组成的,,每个Character都代表一个特定的Unicode字符,通过for-in循环,可以遍历字符串中的每个字符。
for character in "Dog!"{
    println(character)
}
// D
// o
// g
// !
//
  • 全局函数countElements可以计算一个字符串中字符的数量。
  • 字符串的拼接可以用过+号相加来组成一个新的字符串。
let string1 = "hello"
let string2 = " there"
let stringPlusString = string1 + string2 // equals "hello there"

也可以使用+=号来组合:

let string1 = "hello"
let string2 = " there"
string1 += string2 // equals "hello there"
  • 字符串的比较

Swift提供三种方法比较字符串的值:字符串相等,前缀相等,和后缀相等。
* 字符串相等:==
* 前缀(prefix)相等和后缀(hasSuffix)相等:使用string 类的两个方法hasPrefix和hasSuffix,来检查一个字符串的前缀或者后缀是否包含另外一个字符串

  • 大小写字符串
    可以通过String提供的uppercaseString 和 lowercaseString方法获得一个字符串的大写或小写。

11、数组

  • 定义:存储相同类型不同值的序列化列表。
  • 数组初始化:
var someInts = Int[]() 
//创建一个空数组

var shoppingList: String[] = ["Eggs", "Milk"]
// 使用两个初始化参数来初始化shoppingList

var shoppingList = ["Eggs", “Milk"]
// 得益于Swift的类型判断,当使用相同类型的值来初始化时,可以不写明类型。
  • 获取数组的长度:count属性。
  • 判断数组是否为空:isEmpty属性。
  • 在数组末尾增加一个元素可以通过append方法。
  • 还可以用(+=)操作符来把一个元素添加到数组末尾
shoppingList += "Baking Powder"
// shoppingList 现在包含4个元素
  • 也可以用(+=)操作符来把一个数组添加到另一个数组的末尾
shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
// shoppingList 现在包含7个元素
  • 注意:不能使用下标语法在数组中添加一个元素。在一个特定的索引位置插入一个值,可以使用insert(atIndex:)方法。
  • 调用removeAtIndex方法移除特定的元素。
  • 数组的遍历:可以使用for-in循环来遍历数组中的值
for item in shoppingList {   
    println(item)
}
// Six eggs
// Milk
// Flour
// Baking Powder
// Bananas

如果需要每一个元素的整形的索引值,使用enumerate函数代替会更方便,enumerate函数对于每一个元素都会返回一个包含元素的索引和值的元组(tuple)。你可以在遍历部分分解元祖并储存在临时变量或者常量中。

for (index, value) in enumerate(shoppingList) {     
    println("Item \(index + 1): \(value)")
}
// 元素 1: Six eggs
// 元素 2: Milk
// 元素 3: Flour
// 元素 4: Baking Powder
// 元素 5: Bananas

12、字典

  • 字典创建
var airport :Dictionary = ["TYO": "Tokyo", "DUB": “Dublin"]

airport字典被定义为一个类型为Dictionary,这意味这,这个字典的键类型是字符串String,和它的值的类型也是String。

和数组一样,如果你初始化一个字典的时候使用相同的类型,你可以不指明字典的类型。
airport初始化可以用下面这个简略写法来代替:

var airports = ["TYO": "Tokyo", "DUB": “Dublin”]
  • count属性来检查字典(Dictionary)包含多少个元素。
  • 可以使用下标语法给一个字典添加一个元素或者改变一个特定键所关联的值。
airports["LHR"] = "London Heathrow"
  • 遍历字典

for-in循环来遍历字典的键值对:字典中的每一个元素都会返回一个元祖(tuple)

for (airportCode, airportName) in airports {
println("\(airportCode): \(airportName)")
}
// TYO: Tokyo
// LHR: London Heathrow

13、控制流

  • swift的控制流结构和OC基本一样,包括for和while循环;if和switch条件语句;break和continue跳转语句等。
  • 注意:相对于C语言,Swift中switch语句的case语句后,不会自动跳转到下一个语句,这样就避免了C语言中因为忘记break而造成的错误。所以不需要每句末尾添加break。

你可能感兴趣的:(swift基础学习)