本文共 4171 字,大约阅读时间需要 13 分钟。
Use three double quotes (""") for strings that take up multiple lines
使用三个双引号,标示跨越多行的字符串let quotation = """Even though there's whitespace to the left,the actual lines aren't indented.Except for this line.Double quotes (") can appear without being escaped. I still have \(apples + oranges) pieces of fruit."""
Another way to handle optional values is to provide a default value using the ?? operator. If the optional value is missing, the default value is used instead.
另外一种处理可选值的方式是用 ?? 运算符 如果一个可选值不存在值,则使用默认值代替let nickName: String? = nillet fullName: String = "John Appleseed"let informalGreeting = "Hi \(nickName ?? fullName)"
Notice how let can be used in a pattern to assign the value that matched the pattern to a constant.
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.")}
In an if statement, the conditional must be a Boolean expression—this means that code such as if score { ... } is an error, not an implicit comparison to zero. 与0没有什么关系
You use for-in to iterate over items in a dictionary by providing a pair of names to use for each key-value pair. Dictionaries are an unordered collection, so their keys and values are iterated over in an arbitrary order.
let interestingNumbers = [ "Prime": [2, 3, 5, 7, 11, 13], "Fibonacci": [1, 1, 2, 3, 5, 8], "Square": [1, 4, 9, 16, 25],]var largest = 0for (kind, numbers) in interestingNumbers { for number in numbers { if number > largest { largest = number } }}print(largest)
Use while to repeat a block of code until a condition changes. The condition of a loop can be at the end instead, ensuring that the loop is run at least once.
类似do whilevar m = 2repeat { m *= 2} while m < 100print(m)
You can keep an index in a loop by using ..< to make a range of indexes.
Use ..< to make a range that omits its upper value, and use ... to make a range that includes both values.var total = 0for i in 0..<4 { total += i}print(total)
By default, functions use their parameter names as labels for their arguments. Write a custom argument label before the parameter name, or write _ to use no argument label.
参数的外部名称和内部名称func greet(_ person: String, on day: String) -> String { return "Hello \(person), today is \(day)."}greet("John", on: "Wednesday")
Use a tuple to make a compound value—for example, to return multiple values from a function. The elements of a tuple can be referred to either by name or by number.
func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) { var min = scores[0] var max = scores[0] var sum = 0 for score in scores { if score > max { max = score } else if score < min { min = score } sum += score } return (min, max, sum)}let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9])print(statistics.sum)print(statistics.2)
函数可以嵌套
Functions can be nested. Nested functions have access to variables that were declared in the outer function. You can use nested functions to organize the code in a function that is long or complex.func returnFifteen() -> Int { var y = 10 func add() { y += 5 } add() return y}returnFifteen()
Functions are a first-class type. This means that a function can return another function as its value.
func makeIncrementer() -> ((Int) -> Int) { func addOne(number: Int) -> Int { return 1 + number } return addOne}var increment = makeIncrementer()increment(7)
A function can take another function as one of its arguments.
当然也能作为参数func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool { for item in list { if condition(item) { return true } } return false}func lessThanTen(number: Int) -> Bool { return number < 10}var numbers = [20, 19, 7, 12]hasAnyMatches(list: numbers, condition: lessThanTen)
转载地址:http://gqfsa.baihongyu.com/