注释
Swift的注释与C语言机器相似,单行注释以两个反斜线开头:
//这是一行注释
多行注释以/*开始 以 */结尾
/* 这也是一行注释
但跨行越多行 */
与C语言多行注释有所不同的是,Swift的多行注释可以嵌套在其他多行注释内部。写法是在一个多行注释块内嵌套另一个多行注释。第二个注释块封闭时,后面仍接着第一个注释块:
/* 这是第一个多行注释的开头
/* 这是嵌套的第二个多行注释 */
这是第一个多行注释的结尾 */
多行注释的嵌套可以更快捷方便的注释代码块,及时代码块中已经有了注释。
分号
与其他语言不同的是,Swift不要求在每行语句的结尾使用分号(;),但是如果是同一行写多条语句时,需要用分号(;)隔开:
import Cocoa
/* print hello world 是我的第一个Swift程序 */
var printStr = "Hello World!"; print(printStr)
标识符
标识符就是给变量、常量、方法、函数、枚举、结构体、类、协议等指定名字。构成标识符的字母均有一定的规范。Swift语言中标识符的命名规则如下:
- 区分大小写,Str与str是两个不同的标识符;
- 标识符首字符可以是下划线(_)或者字母开始,但不能是数字;
- 标识符中其他字符可以是下划线(_)、字母或数字
例如:userName、User_Name、_sys_val、等均为合法标识符,而 2mail、room#和class为非法的标识符。
注意:Swift中字母采用的Unicode编码。Unicode叫做同意编码制,它包含了亚洲文字编码,如中文、日文、韩文等字符,甚至是我们聊天工具中使用的表情符号,如果一定需要用到关键字作为标识符,可以在关键词前后添加重音符号(`),例如:
let `class` = "小强五号"
关键字
关键字是类似于标识符的保留字符序列,除非用重音符(`)将其括起来,否则不能用作标识符。关键字对编译器具有特殊意义的预订保留标识符。常见的关键字有以下4种。
一.与声明有关的关键字
class | deint | enum | extension |
---|---|---|---|
func | import | init | internal |
let | operator | private | protocol |
public | static | struct | subscript |
typealias | var |
二.与语句有关的关键字
break | case | continue | default |
---|---|---|---|
do | else | fallthrough | for |
if | in | return | switch |
where | while |
三.表达式和类型有关的关键字
dynamicType | as | false | is |
---|---|---|---|
nil | self | Self | super |
true | _COLUMN_ |
** _FILE_ ** |
_FUNCTION_ |
_LINE_ |
四.在特定上下文中使用关键字
associativity | convenience | dynamic | didSet |
---|---|---|---|
final | get | infix | inout |
lazy | left | mutating | none |
nonmutating | optional | override | postfix |
precedence | prefix | Protocol | required |
right | set | Type | unowned |
weak | willSet |
Swift空格
Swift语言并不像C/C++,java那样完全忽视空格,Swift对空格的使用有一定的要求,但是又不像Python对缩进的要求那么严格。在Swift中,运算不能直接跟在常量或常量的后面,例如下面的代码逻辑会报错:
let a= 1 + 2
错误信息是:
error:'=' must have consistent whitespace on both sides
Insert ' '
正确写法:
let a = 1 + 2
let b = 3+4
Swift 字面量
所谓字面量,就是指像特定的数字,字符串或者布尔值这样,能够直接了当支出自己的类型并为变量进行赋值。比如下面:
42 // 整型字面量
3.14159 // 浮点型字面量
"Hello World!" // 字符串型字面量
true //布尔型字面量
打印信息
Swift 使用print 函数打印输出:
print("hello world!")
print 函数是一个全局函数,完整的函数签名为:
public func print(items: Any..., separator: String = default, terminator: String = default)
如果我们想让其不换行输出,只需要将最后一个参数赋值为空字符串即可:
func mj_logArrayMes() -> Void {
for index in 0...10 {
print("\(index)", terminator: " ")
}
}
输出结果为:
0 1 2 3 4 5 6 7 8 9 10
如果你需要接受用户的输入可以使用readLine():暂时不知道怎么使用
结构体
Swift 结构体是构建代码所用的一种通用且灵活的结构体。
我们可以为结构体定义属性(常量、变量)和添加方法,从而拓展结构体的功能。
与 C 和 OC 不同的是:
- 结构体不需要包含实现文件和接口
- 结构体允许我们创建一个单一文件,且系统会自动生成面前其他代码的外部接口。
结构体总是通过被复制的方式在代码中传递,因此他的值时不可以修改的。
语法
我们通过关键字 struct 来定义结构体:
struct nameStruct {
Definition 1
Definition 2
……
Definition N
}
我们定义一个名为 MarkStruct 的结构体 ,结构体的属性为学生三个科目的分数,数据类型为 Int:
struct MarkStruct{
var mark1: Int
var mark2: Int
var mark3: Int
}
我们可以通过结构体名来访问结构体成员。
结构体实例化使用 let 关键字
struct studentMarks {
var mark1 = 100
var mark2 = 78
var mark3 = 98
}
let marks = studentMarks()
print("Mark1 是 \(marks.mark1)")
print("Mark2 是 \(marks.mark2)")
print("Mark3 是 \(marks.mark3)")
以上程序执行输出结果为:
Mark1 是 100
Mark2 是 78
Mark3 是 98
实例中,我们通过结构名 ‘studentMarks’访问学生的成绩。结构体成员初始化mark1,mark2,mark3,数据类型为整型。然后我们通过使用 let 关键字将结构体 studentMarks() 实例化并传递给 marks。最后我们就通过 . 号来访问结构体成员的值。以下实例化通过结构体实例化时传值并克隆一个结构体:
struct MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct // aStruct 和 bStruct 是使用相同值的结构体!
bStruct.mark = 97
print(aStruct.mark) // 98
print(bStruct.mark) // 97
以上程序执行输出结果为:
98
97
结构体的应用
在你的代码中,你可以使用结构体来定你的自定义数据类型。结构体实例总是通过值传递来定你的自定义数据类型。按照通用的准则,当符合一条或多条条件时,请考虑结构体:
- 结构体的主要目的是用来封装少量相关简单的数据
- 有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是引用
- 任何在结构体中储存的值类型属性,也将会被拷贝,而不是引用
- 结构体不需要继承另一个已存在类型的属性或者行为。
举例来说,以下情境中适合使用结构体:
- 几何形状的大小,封装一个width属性和height属性,两者均为Double类型。
- 一定范围内的路径,封装一个start属性和length属性,两者均为Int类型。
- 三维坐标系内一点,封装x,y和z属性,三者均为Double类型。
结构体实例是通过值传递而不是通过引用传递。
struct markStruct{
var mark1: Int
var mark2: Int
var mark3: Int
init(mark1: Int, mark2: Int, mark3: Int){
self.mark1 = mark1
self.mark2 = mark2
self.mark3 = mark3
}
}
print("优异成绩:")
var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
print(marks.mark1)
print(marks.mark2)
print(marks.mark3)
print("糟糕成绩:")
var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)
print(fail.mark1)
print(fail.mark2)
print(fail.mark3)
输出结果是:
优异成绩:
98
96
100
糟糕成绩:
34
42
13
以上实例中我们定义了结构体 markStruct,三个成员属性:mark1, mark2 和 mark3。结构体内使用成员属性使用 self 关键字。从实例中我们可以很好的理解到结构体实例是通过值传递的。
网友评论