Swift 基础知识(一)

2016-03-05  本文已影响44人  对歌当酒

1. 简单值

使用 let 来声明常量,使用 var 来声明变量,代码示例:

var myVariable = 42
myVariable = 50

let myConstant = 42

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

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

let implicitInteger = 70
let implicitDouble = 70.0
let explicitDouble: Double = 70

let decimalInt:Int = 9 //十进制
let binaryInt:Int = 0b1001  //二进制

let d:Double = 0.1415926
let label = "The width is"
let width = 94
let widthLabel = label + String(width)
let widthLabel = label + " \(width)" //这样可以添加一个空格

有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠。例如:

let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
var shoppingList = ["catfish", "water", "tulips", "blue paint"]
shoppingList[1] = "bottle of water"
var occupations = [
    "Malcolm": "Captain",
    "Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"

要创建一个空数组或者字典,使用初始化语法:

let emptyArray = [String]()
let emptyDictionary = [String: Float]()

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

shoppingList = []
occupations = [:]

元组:将多个不同的值集合成一个数据。
特点:可以有多个值;不同的值可以是不同类型。
示例代码:

let connection = ( 404, "Not Found" )

// 访问方式一
connection.0
connection.1

// 访问方式二
let ( code, alert ) = connection
code //这样可以富含语义
alert

// 若不关心第二个变量,则可以用下划线替代,如下:
let ( code, _ ) = connection
code

参考:元组 Tuples - 慕课网

2. 控制流

使用 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)

PS: 在 if 语句中,条件必须是一个布尔表达式——这意味着像 if score { ... } 这样的代码将报错,而不会隐形地 与 0 做对比。

var optionalString: String? = "Hello" //此处也可以不赋值,则默认为 nil
print(optionalString == nil)

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}
//此时输出为 "Hello, John Appleseed", 若 optionalName 不赋值,则 if 语句不执行

关于可选值,可参考视频 可选型 Optionals

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

let nickName: String? = nil
let fullName: String = "John Appleseed"
let informalGreeting = "Hi \(nickName ?? fullName)"
// 若 nickName 为 nil,则用 fullName 替代;否则为 nickName
let vegetable = "red pepper"
switch vegetable {
case "celery":
     print("Add some raisins and make ants on a log.")
case "cucumber", "watercress":
     print("That would make a good tea sandwich.")
 case let x where x.hasSuffix("pepper"):
     print("Is it a spicy \(x)?")
 default:
     print("Everything tastes good in soup.")
}

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

let interestingNumbers = [
     "Prime": [2, 3, 5, 7, 11, 13],
     "Fibonacci": [1, 1, 2, 3, 5, 8],
     "Square": [1, 4, 9, 16, 25],
 ]
 var largest = 0
 for (kind, numbers) in interestingNumbers {
     for number in numbers {
         if number > largest {
             largest = number
         }
     } 
}
print(largest)
var n = 2
while n < 100 {
    n = n * 2 
}
print(n)
var m = 2
repeat {
    m = m * 2
} while m < 100
print(m)

可以在循环中使用 ..< 来表示范围,也可以使用传统的写法,两者是等价的。如下:

 var firstForLoop = 0
 for i in 0..<4 {
     firstForLoop += i
 }
 print(firstForLoop)

 var secondForLoop = 0
 for var i = 0; i < 4; ++i {
     secondForLoop += i
 }
print(secondForLoop)

PS: 使用 ..< 创建的范围不包含上界,如果想包含的话需要使用 ...

《The Swift Programming Language 中文版》

上一篇下一篇

猜你喜欢

热点阅读