Swift学习笔记(一)

2016/06/25 iOS开发

简单记录学习Swift的笔记

###简单值

  • 使用let来声明常量,使用var来声明变量。

  • 常量或者变量的类型,必须和你赋给它们的值一样。然而,不用明确地声明类型,声明的同时赋值的话,编译器会自动推断类型。

  • 如果初始值没有提供足够的信息(或者没有初始值),那你需要在变量后面声明类型,用冒号分割。

  • 值永远不会被隐式转换为其他类型。如果你需要把一个值转换成其他类型,请显式转换。

例如

let label = "The width is"
let width = 94
let widthLabel = label + String(width)
  • 有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠。
let firstWord = "Lin"
let secondWord = "i love \(firstWord)"
  • 使用方括号[]来创建数组和字典,并使用下标或者键(key)来访问元素。最后一个元素后面允许有个逗号。
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1]

var occupations = [
    "Malcolm": "Captain",
    "Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"

  • 要创建一个空数组或者字典,使用初始化语法。
let emptyArray = [String]()
let emptyDictionary = [String: String]()

  • 如果类型信息可以被推断出来,你可以用[][:]来创建空数组和空字典——就像你声明变量或者给函数传参数的时候一样。
shoppingList = []
occupations = [:]

控制流

  • 使用ifswitch来进行条件操作,使用for-inforwhilerepeat-while来进行循环。

  • 包裹条件和循环变量括号可以省略,但是语句体的大括号是必须的。

let individualScores = [75, 43, 103, 87, 12]
var teamScore = 0
for score in individualScores {
    if score > 50 {
        teamScore += 3
    } else {
        teamScore += 1
    }
}
print(teamScore)

  • if语句中,条件必须是一个布尔表达式

  • 你可以一起使用iflet来处理值缺失的情况。这些值可由可选值来代表。一个可选的值是一个具体的值或者是nil以表示值缺失。在类型后面加一个问号来标记这个变量的值是可选的。

var optionalString: String? = "Hello"
print(optionalString == nil)

var optionalName: String? = "Lin"
var greeting = "Hello!"

optionalName = nil
if optionalName == nil {
   greeting = "Lix love Lin 🙄"
}else{
    let name = optionalName
    greeting = "\(name) love Lix 🌚"
}

  • 如果变量的可选值是nil,条件会判断为false,大括号中的代码会被跳过。如果不是nil,会将值赋给let后面的常量,这样代码块中就可以使用这个值了。

  • 另一种处理可选值的方法是通过使用 ?? 操作符来提供一个默认值。如果可选值缺失的话,可以使用默认值来代替。

let nickName: String? = "球球 🤗"
let fullName: String? = "LinHong"
let informalGreeting = "Hi \(nickName ?? fullName)"

  • switch支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。
let sport = "basketball"
switch sport {
case "football":
    print("this is the first sport")
    
case "running":
    print("Lin was running everyday")
    
case let x where x.hasSuffix("ball"):
    print("Lix play \(sport) everyday")
    
default:
    print("keep moving")
}

  • 运行switch中匹配到的子句之后,程序会退出switch语句,并不会继续向下运行,所以不需要在每个子句结尾写break

  • 你可以使用for-in来遍历字典,需要两个变量来表示每个键值对。字典是一个无序的集合,所以他们的键和值以任意顺序迭代结束。

let interestingNumbers = [
    "Prime": [2,3,5,7,11],
    "Fibonacci": [1,1,2,3,5,8,13],
    "Square": [1,4,9,16]
]

var largest = 0
var numberClass = "number"
for (kind, numbers) in interestingNumbers {
    for number in numbers {
        if number > largest {
            largest = number
            numberClass = kind
        }
    }
}

print(largest)
print(numberClass)

  • 使用while来重复运行一段代码直到不满足条件。循环条件也可以在结尾,保证能至少循环一次。
var n = 2
while n < 100 {
    n = n * 2
}
print(n)

var m = 2
repeat {
 m = m * 2
} while m < 100     //循环条件可以在结尾,至少保证循环一次
print(m)

  • 你可以在循环中使用..<来表示范围。
var total = 0
for i in 0..<4 {
    total += i
}
print(total)

  • 使用..<创建的范围不包含上界,如果想包含的话需要使用...
var total = 0
for i in 0...100 {
    total += i
}
print(total)

Search

    Table of Contents