Merge pull request #375 from yakirChen/develop
三种集合类型 Array , Set , Dictionary
This commit is contained in:
@ -4,7 +4,7 @@
|
||||
# 关于 Swift
|
||||
-----------------
|
||||
|
||||
Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用。Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣。Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,它的降临将重新定义软件开发。
|
||||
Swift 是一种新的编程语言,用于编写 iOS,OS X 和 watchOS应用程序。Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制。Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣。Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,它的降临将重新定义软件开发。
|
||||
|
||||
Swift 的开发从很久之前就开始了。为了给 Swift 打好基础,苹果公司改进了编译器,调试器和框架结构。我们使用自动引用计数(Automatic Reference Counting, ARC)来简化内存管理。我们在 Foundation 和 Cocoa 的基础上构建框架栈并将其标准化。Objective-C 本身支持块、集合语法和模块,所以框架可以轻松支持现代编程语言技术。正是得益于这些基础工作,我们现在才能发布这样一个用于未来苹果软件开发的新语言。
|
||||
|
||||
@ -14,4 +14,4 @@ Swift 对于初学者来说也很友好。它是第一个既满足工业标准
|
||||
|
||||
Swift 将现代编程语言的精华和苹果工程师文化的智慧结合了起来。编译器对性能进行了优化,编程语言对开发进行了优化,两者互不干扰,鱼与熊掌兼得。Swift 既可以用于开发 “hello, world” 这样的小程序,也可以用于开发一套完整的操作系统。所有的这些特性让 Swift 对于开发者和苹果来说都是一项值得的投资。
|
||||
|
||||
Swift 是编写 iOS 和 OS X 应用的极佳手段,并将伴随着新的特性和功能持续演进。我们对 Swift 充满信心,你还在等什么!
|
||||
Swift 是编写 iOS,OS X 和 watchOS应用的极佳手段,并将伴随着新的特性和功能持续演进。我们对 Swift 充满信心,你还在等什么!
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
通常来说,编程语言教程中的第一个程序应该在屏幕上打印“Hello, world”。在 Swift 中,可以用一行代码实现:
|
||||
|
||||
```swift
|
||||
println("Hello, world")
|
||||
print("Hello, world")
|
||||
```
|
||||
|
||||
如果你写过 C 或者 Objective-C 代码,那你应该很熟悉这种形式——在 Swift 中,这行代码就是一个完整的程序。你不需要为了输入输出或者字符串处理导入一个单独的库。全局作用域中的代码会被自动当做程序的入口点,所以你也不需要`main`函数。你同样不需要在每个语句结尾写上分号。
|
||||
@ -119,7 +119,7 @@ for score in individualScores {
|
||||
teamScore += 1
|
||||
}
|
||||
}
|
||||
teamScore
|
||||
print(teamScore)
|
||||
```
|
||||
|
||||
在`if`语句中,条件必须是一个布尔表达式——这意味着像`if score { ... }`这样的代码将报错,而不会隐形地与 0 做对比。
|
||||
@ -128,7 +128,7 @@ teamScore
|
||||
|
||||
```swift
|
||||
var optionalString: String? = "Hello"
|
||||
optionalString == nil
|
||||
print(optionalString == nil)
|
||||
|
||||
var optionalName: String? = "John Appleseed"
|
||||
var greeting = "Hello!"
|
||||
@ -161,6 +161,8 @@ default:
|
||||
> 练习:
|
||||
> 删除`default`语句,看看会有什么错误?
|
||||
|
||||
声明'let'可用于匹配某部分固定值的模式
|
||||
|
||||
运行`switch`中匹配到的子句之后,程序会退出`switch`语句,并不会继续向下运行,所以不需要在每个子句结尾写`break`。
|
||||
|
||||
你可以使用`for-in`来遍历字典,需要两个变量来表示每个键值对。字典是一个无序的集合,所以他们的键和值以任意顺序迭代结束。
|
||||
@ -179,7 +181,7 @@ for (kind, numbers) in interestingNumbers {
|
||||
}
|
||||
}
|
||||
}
|
||||
largest
|
||||
print(largest)
|
||||
```
|
||||
|
||||
> 练习:
|
||||
@ -192,13 +194,13 @@ var n = 2
|
||||
while n < 100 {
|
||||
n = n * 2
|
||||
}
|
||||
n
|
||||
print(n)
|
||||
|
||||
var m = 2
|
||||
do {
|
||||
m = m * 2
|
||||
} while m < 100
|
||||
m
|
||||
print(m)
|
||||
```
|
||||
|
||||
你可以在循环中使用`..<`来表示范围,也可以使用传统的写法,两者是等价的:
|
||||
@ -208,13 +210,13 @@ var firstForLoop = 0
|
||||
for i in 0..<4 {
|
||||
firstForLoop += i
|
||||
}
|
||||
firstForLoop
|
||||
print(firstForLoop)
|
||||
|
||||
var secondForLoop = 0
|
||||
for var i = 0; i < 4; ++i {
|
||||
secondForLoop += i
|
||||
}
|
||||
secondForLoop
|
||||
print(secondForLoop)
|
||||
```
|
||||
|
||||
使用`..<`创建的范围不包含上界,如果想包含的话需要使用`...`。
|
||||
@ -228,7 +230,7 @@ secondForLoop
|
||||
func greet(name: String, day: String) -> String {
|
||||
return "Hello \(name), today is \(day)."
|
||||
}
|
||||
greet("Bob", "Tuesday")
|
||||
greet("Bob",day: "Tuesday")
|
||||
```
|
||||
|
||||
> 练习:
|
||||
@ -254,8 +256,8 @@ func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
|
||||
return (min, max, sum)
|
||||
}
|
||||
let statistics = calculateStatistics([5, 3, 100, 3, 9])
|
||||
statistics.sum
|
||||
statistics.2
|
||||
print(statistics.sum)
|
||||
print(statistics.2)
|
||||
```
|
||||
|
||||
函数可以带有可变个数的参数,这些参数在函数内表现为数组的形式:
|
||||
@ -317,7 +319,7 @@ func lessThanTen(number: Int) -> Bool {
|
||||
return number < 10
|
||||
}
|
||||
var numbers = [20, 19, 7, 12]
|
||||
hasAnyMatches(numbers, lessThanTen)
|
||||
hasAnyMatches(numbers,condition: lessThanTen)
|
||||
```
|
||||
|
||||
函数实际上是一种特殊的闭包,你可以使用`{}`来创建一个匿名闭包。使用`in`将参数和返回值类型声明与闭包函数体进行分离。
|
||||
@ -344,7 +346,7 @@ mappedNumbers
|
||||
|
||||
```swift
|
||||
let sortedNumbers = sorted(numbers) { $0 > $1 }
|
||||
sortedNumbers
|
||||
print(sortedNumbers)
|
||||
```
|
||||
|
||||
<a name="objects_and_classes"></a>
|
||||
@ -449,9 +451,9 @@ class EquilateralTriangle: NamedShape {
|
||||
}
|
||||
}
|
||||
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
|
||||
triangle.perimeter
|
||||
print(riangle.perimeter)
|
||||
triangle.perimeter = 9.9
|
||||
triangle.sideLength
|
||||
print(triangle.sideLength)
|
||||
```
|
||||
|
||||
在`perimeter`的 setter 中,新值的名字是`newValue`。你可以在`set`之后显式的设置一个名字。
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
|
||||
Swift 是一门进行 iOS 和 OS X 应用开发的新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。
|
||||
|
||||
Swift 包含了 C 和 Objective-C 上所有基础数据类型,`Int`表示整型值;`Double`和`Float`表示浮点型值;`Bool`是布尔型值;`String`是文本型数据。Swift 还提供了两个基本的集合类型,`Array`和`Dictionary`,详见[集合类型](04_Collection_Types.html)。
|
||||
Swift 包含了 C 和 Objective-C 上所有基础数据类型,`Int`表示整型值;`Double`和`Float`表示浮点型值;`Bool`是布尔型值;`String`是文本型数据。Swift 还提供了三个基本的集合类型,`Array`,`Set`和`Dictionary`,详见[集合类型](04_Collection_Types.html)。
|
||||
|
||||
就像 C 语言一样,Swift 使用变量来进行存储并通过变量名来关联值。在 Swift 中,广泛的使用着值不可变的变量,它们就是常量,而且比 C 语言的常量更强大。在 Swift 中,如果你要处理的值不需要改变,那使用常量可以让你的代码更加安全并且更清晰地表达你的意图。
|
||||
|
||||
@ -693,4 +693,3 @@ assert(age >= 0)
|
||||
|
||||
> 注意:
|
||||
断言可能导致你的应用终止运行,所以你应当仔细设计你的代码来让非法条件不会出现。然而,在你的应用发布之前,有时候非法条件可能出现,这时使用断言可以快速发现问题。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user