From 940e9606765252b87a39ccf7f14d2db40ad65f4a Mon Sep 17 00:00:00 2001 From: Zhang Honghao Date: Wed, 4 Jun 2014 19:33:50 -0400 Subject: [PATCH 1/6] Added "Functions" Chapter. Rename some files. Added "Functions" Chapter, Rename some files. Each chapter has one corresponding file. --- source/chapter2/Functions.md | 11 ++ source/chapter2/article_1.md | 105 ------------------ .../chapter2/{the_basics.md => the basics.md} | 0 3 files changed, 11 insertions(+), 105 deletions(-) create mode 100644 source/chapter2/Functions.md delete mode 100644 source/chapter2/article_1.md rename source/chapter2/{the_basics.md => the basics.md} (100%) diff --git a/source/chapter2/Functions.md b/source/chapter2/Functions.md new file mode 100644 index 00000000..fd6c473a --- /dev/null +++ b/source/chapter2/Functions.md @@ -0,0 +1,11 @@ +# 函数(Functions) + +函数是用来完成特定任务的独立的代码块。你给一个函数起一个合适的名字,用来标示函数做什么,并且当函数需要执行的时候,这个名字会被“调用”。 + +Swift统一的函数语法足够灵活,可以用来表示任何函数,包括从最简单的没有参数名字的C风格函数,到复杂的带局部和外部参数名的Objective-C风格函数。参数可以提供默认值,以简化函数调用。参数也可以即当做传入参数,也当做传出参数,也就是说,一旦函数执行结束,传入的参数值可以被修改。 + +在Swift中,每个函数都有一种类型,包括函数的参数值类型和返回值类型。你可以把函数类型当做任何其他普通变量类型一样处理,这样就可以更简单地把函数当做别的函数的参数,也可以从其他函数中返回函数。函数的定义可以写在在其他函数定义中,这样可以在嵌套函数范围内实现功能封装。 + +## 函数的定义与调用 + +当你定义一个函数时,你可以定义一个或多个有名字和类型的值,作为函数的输入(称为参数),也可以定义某种类型的值作为函数执行结束的输出(称为返回类型)。 \ No newline at end of file diff --git a/source/chapter2/article_1.md b/source/chapter2/article_1.md deleted file mode 100644 index 5f28f6b1..00000000 --- a/source/chapter2/article_1.md +++ /dev/null @@ -1,105 +0,0 @@ -# 基础部分 - -Swift 是 iOS 和 OS X 应用开发的一门新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。 - -Swift 的类型是在 C 和 Objective-C 的基础上提出的,`Int`是整型;`Double`和`Float`是浮点型;`Bool`是布尔型;`String`是字符串。Swift 还有两个有用的集合类型,`Array`和`Dictionary`,详情参见`集合类型(待添加链接)`。 - -就像 C 语言一样,Swift 使用变量来进行存储并通过变量名来关联值。在 Swift 中,值不可变的变量有着广泛的应用,它们就是常量,而且比 C 语言的常量更强大。在 Swift 中,如果你要处理的值不需要改变,那使用常量可以让你的代码更加安全并且更好地表达你的意图。 - -除了我们熟悉的类型,Swift 还增加了 Objective-C 中没有的类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值。 - -Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示“那儿有一个值,并且它等于 x ”或者“那儿没有值”。可选有点像在 Objective-C 中使用`nil`,但是它可以用在任何类型上,不仅仅是类。可选类型比 Objective-C 中的`nil`指针更加安全也更具表现力,它是 Swift 许多强大特性的重要组成部分。 - -Swift 是一个类型安全的语言,可选就是一个很好的例子。Swift 可以让你清楚地知道值的类型。如果你的代码期望得到一个`String`,类型安全会阻止你不小心传入一个`Int`。你可以在开发阶段尽早发现并修正错误。 - -## 常量和变量 - -常量和变量把一个名字(比如`maximumNumberOfLoginAttempts`或者`welcomeMessage`)和一个指定类型的值(比如数字`10`或者字符串`Hello`)联系起来。常量的值一旦设定就不能改变,而变量的值可以随意更改。 - -### 声明常量和变量 - -常量和变量必须在使用前声明,用`let`来声明常量,用`var`来声明变量。下面的例子展示了如何用常量和变量来记录用户尝试登录的次数: - - let maximumNumberOfLoginAttempts = 10 - var currentLoginAttempt = 0 - -这两行代码可以被理解为: - -“声明一个名字是`maximumNumberOfLoginAttempts`的新常量,并给它一个值`10`。然后,声明一个名字是`currentLoginAttempt`的变量并将它的值初始化为0.” - -在这个例子中,允许的最大尝试登录次数被声明为一个常量,因为这个值不会改变。当前尝试登录次数被声明为一个变量,因为每次尝试登录失败的时候都需要增加这个值。 - -你可以在一行中声明多个常量或者多个变量,用逗号隔开: - - var x = 0.0, y = 0.0, z = 0.0 - -> 注意:如果你的代码中有不需要改变的值,最好将它声明为常量。只将需要改变的值声明为变量。 - -### 类型标注 - -当你声明常量或者变量的时候可以加上类型标注,说明常量或者变量中要存储的值的类型。如果要添加类型标注,在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。 - -这个例子给`welcomeMessage`变量添加了类型标注,表示这个变量可以存储`String`类型的值: - - var welcomeMessage: String - -声明中的冒号代表着“是...类型”,所以这行代码可以被理解为:: - -“声明一个类型为`String`,名字为`welcomeMessage`的变量。” - -“类型为`String`”的意思是“可以存储任意`String`类型的值。” - -`welcomeMessage`变量现在可以被设置成任意字符串: - - welcomeMessage = "Hello" - -> 注意:一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型,详情参见`类型安全和类型推断(待添加链接)`。在上面的例子中,没有给`welcomeMessage`赋初始值,所以添加了一个类型标注。 - -### 常量和变量的命名 - -你可以用任何你喜欢的字符作为常量和变量名,包括Unicode字符: - - let π = 3.14159 - let 你好 = "你好世界" - let 🐶🐮 = "dogcow" - -常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode码位,连线与制表符。尽管常量与变量名中可以包含数字,但是它们不能以数字打头。 - -一旦你将常量或者变量声明为确定的类型,你就不能使用相同的名字再次进行声明,或者以改变其存储的值为其他类型。同时,你也不能将常量与变量进行互转。 - -> 注意:如果你需要使用与Swift保留关键字相同的名称作为常量或者变量名,你可以使用反引号(`)将关键字围住的方式将其作为名字使用。无论如何,你应当避免使用关键字作为常量或变量名,除非你别无选择。 - -你可以更改现有的变量值为其他同类型的值,在下面的例子中,`friendlyWelcome`的值从`"Hello!"`改为了`"Bonjour!"`: - - var friendlyWelcome = "Hello!" - friendlyWelcome = "Bonjour!" - // friendlyWelcome is now "Bonjour!" - -和变量不一样,常量的值一旦被确定以后就不能更改了。尝试这样做会在编译时报错: - - let languageName = "Swift" - languageName = "Swift++" - // this is a compile-time error - languageName cannot be changed - -### 输出常量和变量 - -你可以用`println`函数来输出当前常量或变量的值: - - println(friendlyWelcome) - // prints "Bonjour!" - -`println`是一个用来输出的全局函数,输出的内容会在最后带换行。如果你用Xcode,`println`将会输出内容到“console”面板上。(另一种函数叫`print`,唯一区别是在输出内容最后不会加入换行。) - -`println`函数输出传入的`String`值: - - println("This is a string") - // prints "This is a string" - -像Cocoa里的`NSLog`函数一样,`println`函数可以输出更复杂的信息。这些信息可以包含当前常量和变量的值。 - -Swift用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift会用当前常量或变量的值替换这些占位符。将常量或变量名放入反斜杠符加一对圆括号中`"\()"`: - - println("The current value of friendlyWelcome is \(friendlyWelcome)") - // prints "The current value of friendlyWelcome is Bonjour! - -> 注意:字符串插值所有可用的选项在 字符串插值 这章中讲述。 \ No newline at end of file diff --git a/source/chapter2/the_basics.md b/source/chapter2/the basics.md similarity index 100% rename from source/chapter2/the_basics.md rename to source/chapter2/the basics.md From e8f6e30fa53084a78bbcad4de9542cad640dc657 Mon Sep 17 00:00:00 2001 From: Zhang Honghao Date: Wed, 4 Jun 2014 19:36:33 -0400 Subject: [PATCH 2/6] merged --- source/chapter2/The_Basics.md | 105 ++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 source/chapter2/The_Basics.md diff --git a/source/chapter2/The_Basics.md b/source/chapter2/The_Basics.md new file mode 100644 index 00000000..5f28f6b1 --- /dev/null +++ b/source/chapter2/The_Basics.md @@ -0,0 +1,105 @@ +# 基础部分 + +Swift 是 iOS 和 OS X 应用开发的一门新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。 + +Swift 的类型是在 C 和 Objective-C 的基础上提出的,`Int`是整型;`Double`和`Float`是浮点型;`Bool`是布尔型;`String`是字符串。Swift 还有两个有用的集合类型,`Array`和`Dictionary`,详情参见`集合类型(待添加链接)`。 + +就像 C 语言一样,Swift 使用变量来进行存储并通过变量名来关联值。在 Swift 中,值不可变的变量有着广泛的应用,它们就是常量,而且比 C 语言的常量更强大。在 Swift 中,如果你要处理的值不需要改变,那使用常量可以让你的代码更加安全并且更好地表达你的意图。 + +除了我们熟悉的类型,Swift 还增加了 Objective-C 中没有的类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值。 + +Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示“那儿有一个值,并且它等于 x ”或者“那儿没有值”。可选有点像在 Objective-C 中使用`nil`,但是它可以用在任何类型上,不仅仅是类。可选类型比 Objective-C 中的`nil`指针更加安全也更具表现力,它是 Swift 许多强大特性的重要组成部分。 + +Swift 是一个类型安全的语言,可选就是一个很好的例子。Swift 可以让你清楚地知道值的类型。如果你的代码期望得到一个`String`,类型安全会阻止你不小心传入一个`Int`。你可以在开发阶段尽早发现并修正错误。 + +## 常量和变量 + +常量和变量把一个名字(比如`maximumNumberOfLoginAttempts`或者`welcomeMessage`)和一个指定类型的值(比如数字`10`或者字符串`Hello`)联系起来。常量的值一旦设定就不能改变,而变量的值可以随意更改。 + +### 声明常量和变量 + +常量和变量必须在使用前声明,用`let`来声明常量,用`var`来声明变量。下面的例子展示了如何用常量和变量来记录用户尝试登录的次数: + + let maximumNumberOfLoginAttempts = 10 + var currentLoginAttempt = 0 + +这两行代码可以被理解为: + +“声明一个名字是`maximumNumberOfLoginAttempts`的新常量,并给它一个值`10`。然后,声明一个名字是`currentLoginAttempt`的变量并将它的值初始化为0.” + +在这个例子中,允许的最大尝试登录次数被声明为一个常量,因为这个值不会改变。当前尝试登录次数被声明为一个变量,因为每次尝试登录失败的时候都需要增加这个值。 + +你可以在一行中声明多个常量或者多个变量,用逗号隔开: + + var x = 0.0, y = 0.0, z = 0.0 + +> 注意:如果你的代码中有不需要改变的值,最好将它声明为常量。只将需要改变的值声明为变量。 + +### 类型标注 + +当你声明常量或者变量的时候可以加上类型标注,说明常量或者变量中要存储的值的类型。如果要添加类型标注,在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。 + +这个例子给`welcomeMessage`变量添加了类型标注,表示这个变量可以存储`String`类型的值: + + var welcomeMessage: String + +声明中的冒号代表着“是...类型”,所以这行代码可以被理解为:: + +“声明一个类型为`String`,名字为`welcomeMessage`的变量。” + +“类型为`String`”的意思是“可以存储任意`String`类型的值。” + +`welcomeMessage`变量现在可以被设置成任意字符串: + + welcomeMessage = "Hello" + +> 注意:一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型,详情参见`类型安全和类型推断(待添加链接)`。在上面的例子中,没有给`welcomeMessage`赋初始值,所以添加了一个类型标注。 + +### 常量和变量的命名 + +你可以用任何你喜欢的字符作为常量和变量名,包括Unicode字符: + + let π = 3.14159 + let 你好 = "你好世界" + let 🐶🐮 = "dogcow" + +常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode码位,连线与制表符。尽管常量与变量名中可以包含数字,但是它们不能以数字打头。 + +一旦你将常量或者变量声明为确定的类型,你就不能使用相同的名字再次进行声明,或者以改变其存储的值为其他类型。同时,你也不能将常量与变量进行互转。 + +> 注意:如果你需要使用与Swift保留关键字相同的名称作为常量或者变量名,你可以使用反引号(`)将关键字围住的方式将其作为名字使用。无论如何,你应当避免使用关键字作为常量或变量名,除非你别无选择。 + +你可以更改现有的变量值为其他同类型的值,在下面的例子中,`friendlyWelcome`的值从`"Hello!"`改为了`"Bonjour!"`: + + var friendlyWelcome = "Hello!" + friendlyWelcome = "Bonjour!" + // friendlyWelcome is now "Bonjour!" + +和变量不一样,常量的值一旦被确定以后就不能更改了。尝试这样做会在编译时报错: + + let languageName = "Swift" + languageName = "Swift++" + // this is a compile-time error - languageName cannot be changed + +### 输出常量和变量 + +你可以用`println`函数来输出当前常量或变量的值: + + println(friendlyWelcome) + // prints "Bonjour!" + +`println`是一个用来输出的全局函数,输出的内容会在最后带换行。如果你用Xcode,`println`将会输出内容到“console”面板上。(另一种函数叫`print`,唯一区别是在输出内容最后不会加入换行。) + +`println`函数输出传入的`String`值: + + println("This is a string") + // prints "This is a string" + +像Cocoa里的`NSLog`函数一样,`println`函数可以输出更复杂的信息。这些信息可以包含当前常量和变量的值。 + +Swift用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift会用当前常量或变量的值替换这些占位符。将常量或变量名放入反斜杠符加一对圆括号中`"\()"`: + + println("The current value of friendlyWelcome is \(friendlyWelcome)") + // prints "The current value of friendlyWelcome is Bonjour! + +> 注意:字符串插值所有可用的选项在 字符串插值 这章中讲述。 \ No newline at end of file From 981a0757a4634b1696005df54d650f7fea1e7fb7 Mon Sep 17 00:00:00 2001 From: Zhang Honghao Date: Wed, 4 Jun 2014 19:33:50 -0400 Subject: [PATCH 3/6] Added "Functions" Chapter. Rename some files. Added "Functions" Chapter, Rename some files. Each chapter has one corresponding file. --- source/chapter2/Functions.md | 11 ++ source/chapter2/article_1.md | 105 ------------------ .../chapter2/{the_basics.md => the basics.md} | 0 3 files changed, 11 insertions(+), 105 deletions(-) create mode 100644 source/chapter2/Functions.md delete mode 100644 source/chapter2/article_1.md rename source/chapter2/{the_basics.md => the basics.md} (100%) diff --git a/source/chapter2/Functions.md b/source/chapter2/Functions.md new file mode 100644 index 00000000..fd6c473a --- /dev/null +++ b/source/chapter2/Functions.md @@ -0,0 +1,11 @@ +# 函数(Functions) + +函数是用来完成特定任务的独立的代码块。你给一个函数起一个合适的名字,用来标示函数做什么,并且当函数需要执行的时候,这个名字会被“调用”。 + +Swift统一的函数语法足够灵活,可以用来表示任何函数,包括从最简单的没有参数名字的C风格函数,到复杂的带局部和外部参数名的Objective-C风格函数。参数可以提供默认值,以简化函数调用。参数也可以即当做传入参数,也当做传出参数,也就是说,一旦函数执行结束,传入的参数值可以被修改。 + +在Swift中,每个函数都有一种类型,包括函数的参数值类型和返回值类型。你可以把函数类型当做任何其他普通变量类型一样处理,这样就可以更简单地把函数当做别的函数的参数,也可以从其他函数中返回函数。函数的定义可以写在在其他函数定义中,这样可以在嵌套函数范围内实现功能封装。 + +## 函数的定义与调用 + +当你定义一个函数时,你可以定义一个或多个有名字和类型的值,作为函数的输入(称为参数),也可以定义某种类型的值作为函数执行结束的输出(称为返回类型)。 \ No newline at end of file diff --git a/source/chapter2/article_1.md b/source/chapter2/article_1.md deleted file mode 100644 index 5f28f6b1..00000000 --- a/source/chapter2/article_1.md +++ /dev/null @@ -1,105 +0,0 @@ -# 基础部分 - -Swift 是 iOS 和 OS X 应用开发的一门新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。 - -Swift 的类型是在 C 和 Objective-C 的基础上提出的,`Int`是整型;`Double`和`Float`是浮点型;`Bool`是布尔型;`String`是字符串。Swift 还有两个有用的集合类型,`Array`和`Dictionary`,详情参见`集合类型(待添加链接)`。 - -就像 C 语言一样,Swift 使用变量来进行存储并通过变量名来关联值。在 Swift 中,值不可变的变量有着广泛的应用,它们就是常量,而且比 C 语言的常量更强大。在 Swift 中,如果你要处理的值不需要改变,那使用常量可以让你的代码更加安全并且更好地表达你的意图。 - -除了我们熟悉的类型,Swift 还增加了 Objective-C 中没有的类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值。 - -Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示“那儿有一个值,并且它等于 x ”或者“那儿没有值”。可选有点像在 Objective-C 中使用`nil`,但是它可以用在任何类型上,不仅仅是类。可选类型比 Objective-C 中的`nil`指针更加安全也更具表现力,它是 Swift 许多强大特性的重要组成部分。 - -Swift 是一个类型安全的语言,可选就是一个很好的例子。Swift 可以让你清楚地知道值的类型。如果你的代码期望得到一个`String`,类型安全会阻止你不小心传入一个`Int`。你可以在开发阶段尽早发现并修正错误。 - -## 常量和变量 - -常量和变量把一个名字(比如`maximumNumberOfLoginAttempts`或者`welcomeMessage`)和一个指定类型的值(比如数字`10`或者字符串`Hello`)联系起来。常量的值一旦设定就不能改变,而变量的值可以随意更改。 - -### 声明常量和变量 - -常量和变量必须在使用前声明,用`let`来声明常量,用`var`来声明变量。下面的例子展示了如何用常量和变量来记录用户尝试登录的次数: - - let maximumNumberOfLoginAttempts = 10 - var currentLoginAttempt = 0 - -这两行代码可以被理解为: - -“声明一个名字是`maximumNumberOfLoginAttempts`的新常量,并给它一个值`10`。然后,声明一个名字是`currentLoginAttempt`的变量并将它的值初始化为0.” - -在这个例子中,允许的最大尝试登录次数被声明为一个常量,因为这个值不会改变。当前尝试登录次数被声明为一个变量,因为每次尝试登录失败的时候都需要增加这个值。 - -你可以在一行中声明多个常量或者多个变量,用逗号隔开: - - var x = 0.0, y = 0.0, z = 0.0 - -> 注意:如果你的代码中有不需要改变的值,最好将它声明为常量。只将需要改变的值声明为变量。 - -### 类型标注 - -当你声明常量或者变量的时候可以加上类型标注,说明常量或者变量中要存储的值的类型。如果要添加类型标注,在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。 - -这个例子给`welcomeMessage`变量添加了类型标注,表示这个变量可以存储`String`类型的值: - - var welcomeMessage: String - -声明中的冒号代表着“是...类型”,所以这行代码可以被理解为:: - -“声明一个类型为`String`,名字为`welcomeMessage`的变量。” - -“类型为`String`”的意思是“可以存储任意`String`类型的值。” - -`welcomeMessage`变量现在可以被设置成任意字符串: - - welcomeMessage = "Hello" - -> 注意:一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型,详情参见`类型安全和类型推断(待添加链接)`。在上面的例子中,没有给`welcomeMessage`赋初始值,所以添加了一个类型标注。 - -### 常量和变量的命名 - -你可以用任何你喜欢的字符作为常量和变量名,包括Unicode字符: - - let π = 3.14159 - let 你好 = "你好世界" - let 🐶🐮 = "dogcow" - -常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode码位,连线与制表符。尽管常量与变量名中可以包含数字,但是它们不能以数字打头。 - -一旦你将常量或者变量声明为确定的类型,你就不能使用相同的名字再次进行声明,或者以改变其存储的值为其他类型。同时,你也不能将常量与变量进行互转。 - -> 注意:如果你需要使用与Swift保留关键字相同的名称作为常量或者变量名,你可以使用反引号(`)将关键字围住的方式将其作为名字使用。无论如何,你应当避免使用关键字作为常量或变量名,除非你别无选择。 - -你可以更改现有的变量值为其他同类型的值,在下面的例子中,`friendlyWelcome`的值从`"Hello!"`改为了`"Bonjour!"`: - - var friendlyWelcome = "Hello!" - friendlyWelcome = "Bonjour!" - // friendlyWelcome is now "Bonjour!" - -和变量不一样,常量的值一旦被确定以后就不能更改了。尝试这样做会在编译时报错: - - let languageName = "Swift" - languageName = "Swift++" - // this is a compile-time error - languageName cannot be changed - -### 输出常量和变量 - -你可以用`println`函数来输出当前常量或变量的值: - - println(friendlyWelcome) - // prints "Bonjour!" - -`println`是一个用来输出的全局函数,输出的内容会在最后带换行。如果你用Xcode,`println`将会输出内容到“console”面板上。(另一种函数叫`print`,唯一区别是在输出内容最后不会加入换行。) - -`println`函数输出传入的`String`值: - - println("This is a string") - // prints "This is a string" - -像Cocoa里的`NSLog`函数一样,`println`函数可以输出更复杂的信息。这些信息可以包含当前常量和变量的值。 - -Swift用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift会用当前常量或变量的值替换这些占位符。将常量或变量名放入反斜杠符加一对圆括号中`"\()"`: - - println("The current value of friendlyWelcome is \(friendlyWelcome)") - // prints "The current value of friendlyWelcome is Bonjour! - -> 注意:字符串插值所有可用的选项在 字符串插值 这章中讲述。 \ No newline at end of file diff --git a/source/chapter2/the_basics.md b/source/chapter2/the basics.md similarity index 100% rename from source/chapter2/the_basics.md rename to source/chapter2/the basics.md From 467651ca795520011e4499a4daaa957fa8b4eba0 Mon Sep 17 00:00:00 2001 From: Zhang Honghao Date: Wed, 4 Jun 2014 19:36:33 -0400 Subject: [PATCH 4/6] merged --- source/chapter2/The_Basics.md | 105 ++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 source/chapter2/The_Basics.md diff --git a/source/chapter2/The_Basics.md b/source/chapter2/The_Basics.md new file mode 100644 index 00000000..5f28f6b1 --- /dev/null +++ b/source/chapter2/The_Basics.md @@ -0,0 +1,105 @@ +# 基础部分 + +Swift 是 iOS 和 OS X 应用开发的一门新语言。然而,如果你有 C 或者 Objective-C 开发经验的话,你会发现 Swift 的很多内容都是你熟悉的。 + +Swift 的类型是在 C 和 Objective-C 的基础上提出的,`Int`是整型;`Double`和`Float`是浮点型;`Bool`是布尔型;`String`是字符串。Swift 还有两个有用的集合类型,`Array`和`Dictionary`,详情参见`集合类型(待添加链接)`。 + +就像 C 语言一样,Swift 使用变量来进行存储并通过变量名来关联值。在 Swift 中,值不可变的变量有着广泛的应用,它们就是常量,而且比 C 语言的常量更强大。在 Swift 中,如果你要处理的值不需要改变,那使用常量可以让你的代码更加安全并且更好地表达你的意图。 + +除了我们熟悉的类型,Swift 还增加了 Objective-C 中没有的类型比如元组(Tuple)。元组可以让你创建或者传递一组数据,比如作为函数的返回值时,你可以用一个元组可以返回多个值。 + +Swift 还增加了可选(Optional)类型,用于处理值缺失的情况。可选表示“那儿有一个值,并且它等于 x ”或者“那儿没有值”。可选有点像在 Objective-C 中使用`nil`,但是它可以用在任何类型上,不仅仅是类。可选类型比 Objective-C 中的`nil`指针更加安全也更具表现力,它是 Swift 许多强大特性的重要组成部分。 + +Swift 是一个类型安全的语言,可选就是一个很好的例子。Swift 可以让你清楚地知道值的类型。如果你的代码期望得到一个`String`,类型安全会阻止你不小心传入一个`Int`。你可以在开发阶段尽早发现并修正错误。 + +## 常量和变量 + +常量和变量把一个名字(比如`maximumNumberOfLoginAttempts`或者`welcomeMessage`)和一个指定类型的值(比如数字`10`或者字符串`Hello`)联系起来。常量的值一旦设定就不能改变,而变量的值可以随意更改。 + +### 声明常量和变量 + +常量和变量必须在使用前声明,用`let`来声明常量,用`var`来声明变量。下面的例子展示了如何用常量和变量来记录用户尝试登录的次数: + + let maximumNumberOfLoginAttempts = 10 + var currentLoginAttempt = 0 + +这两行代码可以被理解为: + +“声明一个名字是`maximumNumberOfLoginAttempts`的新常量,并给它一个值`10`。然后,声明一个名字是`currentLoginAttempt`的变量并将它的值初始化为0.” + +在这个例子中,允许的最大尝试登录次数被声明为一个常量,因为这个值不会改变。当前尝试登录次数被声明为一个变量,因为每次尝试登录失败的时候都需要增加这个值。 + +你可以在一行中声明多个常量或者多个变量,用逗号隔开: + + var x = 0.0, y = 0.0, z = 0.0 + +> 注意:如果你的代码中有不需要改变的值,最好将它声明为常量。只将需要改变的值声明为变量。 + +### 类型标注 + +当你声明常量或者变量的时候可以加上类型标注,说明常量或者变量中要存储的值的类型。如果要添加类型标注,在常量或者变量名后面加上一个冒号和空格,然后加上类型名称。 + +这个例子给`welcomeMessage`变量添加了类型标注,表示这个变量可以存储`String`类型的值: + + var welcomeMessage: String + +声明中的冒号代表着“是...类型”,所以这行代码可以被理解为:: + +“声明一个类型为`String`,名字为`welcomeMessage`的变量。” + +“类型为`String`”的意思是“可以存储任意`String`类型的值。” + +`welcomeMessage`变量现在可以被设置成任意字符串: + + welcomeMessage = "Hello" + +> 注意:一般来说你很少需要写类型标注。如果你在声明常量或者变量的时候赋了一个初始值,Swift可以推断出这个常量或者变量的类型,详情参见`类型安全和类型推断(待添加链接)`。在上面的例子中,没有给`welcomeMessage`赋初始值,所以添加了一个类型标注。 + +### 常量和变量的命名 + +你可以用任何你喜欢的字符作为常量和变量名,包括Unicode字符: + + let π = 3.14159 + let 你好 = "你好世界" + let 🐶🐮 = "dogcow" + +常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode码位,连线与制表符。尽管常量与变量名中可以包含数字,但是它们不能以数字打头。 + +一旦你将常量或者变量声明为确定的类型,你就不能使用相同的名字再次进行声明,或者以改变其存储的值为其他类型。同时,你也不能将常量与变量进行互转。 + +> 注意:如果你需要使用与Swift保留关键字相同的名称作为常量或者变量名,你可以使用反引号(`)将关键字围住的方式将其作为名字使用。无论如何,你应当避免使用关键字作为常量或变量名,除非你别无选择。 + +你可以更改现有的变量值为其他同类型的值,在下面的例子中,`friendlyWelcome`的值从`"Hello!"`改为了`"Bonjour!"`: + + var friendlyWelcome = "Hello!" + friendlyWelcome = "Bonjour!" + // friendlyWelcome is now "Bonjour!" + +和变量不一样,常量的值一旦被确定以后就不能更改了。尝试这样做会在编译时报错: + + let languageName = "Swift" + languageName = "Swift++" + // this is a compile-time error - languageName cannot be changed + +### 输出常量和变量 + +你可以用`println`函数来输出当前常量或变量的值: + + println(friendlyWelcome) + // prints "Bonjour!" + +`println`是一个用来输出的全局函数,输出的内容会在最后带换行。如果你用Xcode,`println`将会输出内容到“console”面板上。(另一种函数叫`print`,唯一区别是在输出内容最后不会加入换行。) + +`println`函数输出传入的`String`值: + + println("This is a string") + // prints "This is a string" + +像Cocoa里的`NSLog`函数一样,`println`函数可以输出更复杂的信息。这些信息可以包含当前常量和变量的值。 + +Swift用字符串插值(string interpolation)的方式把常量名或者变量名当做占位符加入到长字符串中,Swift会用当前常量或变量的值替换这些占位符。将常量或变量名放入反斜杠符加一对圆括号中`"\()"`: + + println("The current value of friendlyWelcome is \(friendlyWelcome)") + // prints "The current value of friendlyWelcome is Bonjour! + +> 注意:字符串插值所有可用的选项在 字符串插值 这章中讲述。 \ No newline at end of file From 88cfa382d93d901b5b56699737dae8be2411da65 Mon Sep 17 00:00:00 2001 From: Honghao Zhang Date: Wed, 4 Jun 2014 19:42:08 -0400 Subject: [PATCH 5/6] Rename strings_and_characters.md to Strings_and_Characters.md --- .../{strings_and_characters.md => Strings_and_Characters.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename source/chapter2/{strings_and_characters.md => Strings_and_Characters.md} (100%) diff --git a/source/chapter2/strings_and_characters.md b/source/chapter2/Strings_and_Characters.md similarity index 100% rename from source/chapter2/strings_and_characters.md rename to source/chapter2/Strings_and_Characters.md From def64685e7009657bc07f45d1396d48ae7f17ea8 Mon Sep 17 00:00:00 2001 From: Zhang Honghao Date: Wed, 4 Jun 2014 20:33:30 -0400 Subject: [PATCH 6/6] completed "Defining and Calling Functions" --- source/chapter2/Functions.md | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/source/chapter2/Functions.md b/source/chapter2/Functions.md index fd6c473a..2f4ec98e 100644 --- a/source/chapter2/Functions.md +++ b/source/chapter2/Functions.md @@ -8,4 +8,38 @@ Swift统一的函数语法足够灵活,可以用来表示任何函数,包括 ## 函数的定义与调用 -当你定义一个函数时,你可以定义一个或多个有名字和类型的值,作为函数的输入(称为参数),也可以定义某种类型的值作为函数执行结束的输出(称为返回类型)。 \ No newline at end of file +当你定义一个函数时,你可以定义一个或多个有名字和类型的值,作为函数的输入(称为参数,parameters),也可以定义某种类型的值作为函数执行结束的输出(称为返回类型)。 + +每个函数有个函数名,用来描述函数执行的任务。要使用一个函数时,你用函数名“调用”,并传给它匹配的输入值(称作实参,arguments)。一个函数的实参必须与函数参数表里参数的顺序一致。 + +在下面例子中的函数叫做`"greetingForPerson"`,之所以叫这个名字是因为这个函数用一个人的名字当做输入,并返回给这个人的问候语。为了完成这个任务,你定义一个输入参数-一个叫做`personName`的`String`值,和一个包含给这个人问候语的`String`类型的返回值: + + func sayHello(personName: String) -> String { + let greeting = "Hello, " + personName + "!" + return greeting + } + +所有的这些信息汇总起来成为函数的定义,并以`func`作为前缀。指定函数返回类型时,用返回箭头`->`(一个连字符后跟一个右尖括号)后跟返回类型的名称的方式来表示。 + +该定义描述了函数做什么,它期望接收什么和执行结束时它返回的结果是什么。这样的定义使的函数可以在别的地方以一种清晰的方式被调用: + + println(sayHello("Anna")) + // prints "Hello, Anna!" + println(sayHello("Brian")) + // prints "Hello, Brian! + +调用`sayHello`函数时,在圆括号中传给它一个`String`类型的实参。因为这个函数返回一个`String`类型的值,`sayHello`可以被包含在`println`的调用中,用来输出这个函数的返回值,正如上面所示。 + +在`sayHello`的函数体中,先定义了一个新的名为`greeting`的`String`常量,同时赋值了给`personName`的一个简单问候消息。然后用`return`关键字把这个问候返回出去。一旦`return greeting`被调用,该函数结束它的执行并返回`greeting`的当前值。 + +你可以用不同的输入值多次调用`sayHello`。上面的例子展示的是用`"Anna"`和`"Brian"`调用的结果,该函数分别返回了不同的结果。 + +为了简化这个函数的定义,可以将问候消息的创建和返回写成一句: + + func sayHelloAgain(personName: String) -> String { + return "Hello again, " + personName + "!" + } + println(sayHelloAgain("Anna")) + // prints "Hello again, Anna! + +## 函数参数与返回值 \ No newline at end of file