基础部分

1、基础的数据类型

集合类型:ArraySetDictionary
数据类型:Int(整型值)、Double(浮点型值)、Float(浮点型值)、Bool(布尔型值) 和 String(文本型数据)
  Bool:值有两个常量truefalse

2、高阶数据类型

数据类型:Tuple(元祖)、Optional(可选类型)
Tuple:创建或者传递一组数据。(比如作为函数的返回值时,你可以用一个元组可以返回多个值)
Optional:用于处理值缺失的情况,可以用在任何类型上,不仅仅是类。(有值、或者没有值相当于nil,比nil更加安全、更具变现力)

3、声明常量和变量

let:声明常量(没有发生改变的值)。
var:声明变量()。
  申请的变量和常量名,可以是任意字符、包括Unicode字符。
  常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头,但是可以在常量与变量名的其他地方包含数字。

注意:可以在一行中声明多个常量或者多个变量,用逗号隔开
var x = 0.0, y = 0.0, z = 0.0

4、类型注解

例如:名字类型为 文本类型
var name: String
也可以多个一起
var apple, pear、 banana:  String

5、输出

输出函数
print(_:separator:terminator:)
下面那个是`separator`和`terminator `默认值
print(_ items: Any..., separator: String = " ", terminator: String = "\n")
var name = "zhang san"
name = "li si"
print(name)
print(我的名字\(name))

6、注释

1、//   单行注释
2、/* */ 多行注释(唯一值得注意的是,这个可以嵌套使用)

7、数值型字面量

  • 一个十进制数,没有前缀
  • 一个二进制数,前缀是 0b
  • 一个八进制数,前缀是 0o
  • 一个十六进制数,前缀是 0x
    可以通过minmax来获取类型的最小值和最大值。
实例:
let minValue = UInt8.min(无符号)
let maxValue = UInt8.max(无符号)
let minValue2 = Int8.min(有符号)
let maxValue2 = Int8.max(有符号)

十进制数的指数为 exp,那这个数相当于基数和10^exp 的乘积:
1.25e2 表示 1.25 × 10^2,等于 125.0。
1.25e-2 表示 1.25 × 10^-2,等于 0.0125。

十六进制数的指数为 exp,那这个数相当于基数和2^exp 的乘积:
0xFp2 表示 15 × 2^2,等于 60.0。
0xFp-2 表示 15 × 2^-2,等于 3.75

7、类型别名

类型别名typealiases,简单的说就是给已知的类起一个小名。

 typealias Int2 = UInt16
var maxValue = Int2.min

8、布尔值

Bool:在Swift里面是逻辑上的值,包括有2个布尔常量 truefalse。通常Bool使用在if语句中。ifObjective-C有点不一样,条件值只能是Bool值,不能是其他的常量;

在Objective-C
if (1) {
}
在Swift中,犹豫Swift的安全性,1 已经不是Bool值,不能当初 true 来使用,所以会报错
报错
if 1 {
}
不会报错
if let b = ture {
}

9、元祖

tuples(元祖):可以装任何不同类型的容器。把多个值 组合成为一个复合的值。

let person = ("张三", 28, "男")
类型(String, Int, String)

可以将一个元祖的内容分解(decompose),成单独的常量和变量,然后你就可以正常使用它们了:

let (name, age, sex) = person
print("姓名= \(name)")
// 姓名=张三

如果你只需要一部分元组值,分解的时候可以把要忽略的部分用下划线(_)标记:

let (name, _) = person
print("name = \(name)")
// 输出“姓名=张三”

此外,你还可以通过下标来访问元组中的单个元素,下标从零开始:

print("name = \(person.0)")
// 输出“姓名=张三”

定义元组的时候给单个元素命名:

let person = (name:"张三", age:28, sex="男")
print("name = \(person.name)")
// 输出“姓名=张三”

10、可选类型

可选类型用?表示。

var age: Int? = 18
var name: String? = nil
nil 只能使用在可选类型

注意:nil 不能用于非可选的常量和变量。如果你的代码中有常量或者变量需要处理值缺失的情况,请把它们声明成对应的可选类型。

可以使用构造器的形式来相互转换,和OC中的强制转换差不多。

let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber 被推测为类型 "Int?", 或者类型 "optional Int"

因为该构造器可能会失败,所以它返回一个可选类型(optionalInt,而不是一个Int。一个可选的 Int 被写作 Int? 而不是 Int。问号暗示包含的值是可选类型,也就是说可能包含 Int值也可能不包含值。(不能包含其他任何值比如 Bool 值或者 String 值。只能是 Int 或者什么都没有。)

如果你声明一个可选常量或者变量但是没有赋值,它们会自动被设置为 nil:

var name: String?
// name 被自动设置为 nil

注意:
1、nil 在Swift 和 Objective-C 中不一样。
2、在 Objective-C 中,nil 是一个指向不存在对象的指针
3、在 Swift 中,nil 是一个确定的值,用来表示值缺失
4、任何类型的可选状态都可以被设置为 nil,不只是对象类型。

11、if 语句以及强制解析

确定 可选类型有值 之后,你可以在可选的名字后面加一个感叹号(!)来获取值。

if name != nil {
    print("姓名=\(name!).")
}
// 输出“姓名=张三.”

注意:
使用 ! 来获取一个不存在的可选值会导致运行时错误。
使用 ! 来强制解析值之前,一定要确定可选包含一个非 nil 的值。

12、可选绑定(optional binding)

  这条语句不仅可以用来判断可选类型中是否有值,同时可以将可选类型中的值赋给一个常量或者变量。主要用在ifwhile语句中。

if let constantName = someOptional {
    statements
}
// 可选绑定来重写
if let actualNumber = Int(possibleNumber) {
    print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
    print("\'\(possibleNumber)\' could not be converted to an integer")
}
// 输出“'123' has an integer value of 123”

如果转换成功,actualNumber 常量可以在 if 语句的第一个分支中使用。它已经被可选类型 包含的 值初始化过,所以不需要再使用 ! 后缀来获取它的值。在这个例子中,actualNumber 只被用来输出转换结果。

13、隐式解析可选类型(implicitly unwrapped optionals)

把想要用作可选的类型的后面的问号(String?)改成感叹号(String!)来声明一个隐式解析可选类型

let possibleString: String? = "可选类型"
let forcedString: String = possibleString! // 需要感叹号来获取值

let assumedString: String! = "隐式解析可选类型字符串"
let implicitString: String = assumedString  // 不需要感叹号

14、错误处理

一个错误处理如何用来应对不同错误条件的例子:

// 制作三明治
func makeASandwich() throws {
    // ...
}

do {
    try makeASandwich()
    eatASandwich()
} catch SandwichError.outOfCleanDishes {
    washDishes()
} catch SandwichError.missingIngredients(let ingredients) {
    buyGroceries(ingredients)
}

15、断言和先决条件

断言和先决条件是在运行时所做的检查。

一、断言:
Swift 标准库的 assert(::file:line:) 函数来写一个断言。
let age = -3
assert(age >= 0, "A person's age cannot be less than zero")
// 因为 age < 0,所以断言会触发
使用 assertionFailure(_:file:line:) 函数来表明断言失败了。
if age > 10 {
    print("You can ride the roller-coaster or the ferris wheel.")
} else if age > 0 {
    print("You can ride the ferris wheel.")
} else {
    assertionFailure("A person's age can't be less than zero.")
}
二、强制执行先决条件:
使用全局 precondition(::file:line:) 函数来写一个先决条件。
// 在一个下标的实现里...
precondition(index > 0, "Index must be greater than zero.")
调用 preconditionFailure(_:file:line:) 方法来表明出现了一个错误。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容