以撸代码的形式学习Swift-1:基础(The Basics)

1 常量和变量(Constants and Variables)

// 声明:常量 let 变量 var
let constants = 10
var variables = 0
// 多个声明
var x = 0.0, y = 0.0, z = 0.0
// 类型标注(type annotation)
var welcomeMessage: String
// 常量和变量的命名
// 常量与变量名不能包含数学符号,箭头,保留的(或者非法的)Unicode 码位,连线与制表符。也不能以数字开头。
// 常量与变量不能修改类型也不能互换
// 使用反引号(`)来使用保留关键字
let π = 3.14159
let 你好 = "你好世界"
let `let` = "hihi"
// 输出常量和变量 `func print(_ items: Any..., separator: String = default, terminator: String = default)`  三种参数:输出项、分隔符、结束符
print(1,`let`, separator: ",", terminator: "<br/>")
print(x, y, z, `let`)
// 字符串插值(string interpolation)
print("The current value of constants is \(constants)")

2 注释(Comment)

// 单行注释
/*
 /*
 多行注释可以嵌套在其它的多行注释之中
  */
 */

3 分号(Semicolons)

单行单挑语句不一定需要,单行多条语句必须

let cat = "?"; print(cat)

4 整数(Integers)

U代表无符号
Int类型与当前系统的位数相同

UInt8.max
UInt8.min
Int8.max
Int32.max
UInt32.max
Int64.max
UInt64.max
Int.max

5 浮点数(Floating-Point Numbers)

Double(11.1)                        // 64位
Float(11.1)                         // 32位

6 类型安全(type safe)和类型推断(type inference)

let meaningOfLife = 42              // meaningOfLife 会被推测为 Int 类型
let pi = 3.14159                    // pi 会被推测为 Double 类型(优先选择 Double 而不是 Float )

7 数值型字面量(Numeric Literals)

// 整数字面量
15
0b1111                              // 二进制15
0o17                                // 八进制15
0xf                                 // 十六进制15
// 浮点字面量
1.025e2                             // 1.025*10^2
1.025e-2                            // 1.025*10^-2
0xbp3                               // 11*2^3
0xbp-3                              // 11*2^-3
0xC.3p0                             // (12+3/16)*2^0
100_000                             // _增强可读性

8 数值型类型转换(Numeric Type Conversion)

// 整数转换
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)           // `UInt16`有一个构造器,接受`UInt8`类型的参数生成`UInt16`
// 整数和浮点数转换
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi2 = Double(three) + pointOneFourOneFiveNine
let integerPi = Int(pi2)
let pi3 = 3 + 0.14159                                       // 字面量没有特定的类型,所以可以直接相加

9 类型别名(type aliases)

typealias AudioSample = UInt16
AudioSample.max

10 布尔值

true
false

11 元组(tuples)

把多个值组合成一个复合值

// 元组在临时组织值的时候很有用,但是并不适合创建复杂的数据结构。
let http404Error = (404, "Not Found")                       // 一个类型为 (Int, String) 的元组, 用于描述 HTTP 状态码
let (statusCode, statusMessage) = http404Error              // 元组的内容分解(decompose)
let (justTheStatusCode, _) = http404Error
http404Error.0                                              // 下标访问
let http200Status = (statusCode: 200, description: "OK")    // 给元组元素命名
http200Status.description

12 可选类型(optionals)

// 声明一个可选常量或者变量但是没有赋值,它们会自动被设置为 nil
var optionalString: String?                                 // optionalString的类型要么是String,要么是nil
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)                   // convertedNumber 被推测为可选的`Int`
// if 语句以及强制解析
// 使用 if 语句和 nil 比较来判断一个可选值是否包含值
if convertedNumber != nil {
    print("convertedNumber has an integer value of \(convertedNumber!).")       // `!`称为可选值的强制解析(forced unwrapping)
}
// optionalString! 报错, 使用!来强制解析值之前,一定要确定可选包含一个非nil 的值。
// 可选绑定(optional binding)
if let actualNumber = Int(possibleNumber) {                                     // 如果`Int(possibleNumber)`强制解析的值不是nil,就赋值给actualNumber,并且语句为ture
    print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
} else {
    print("\'\(possibleNumber)\' could not be converted to an integer")
}
var someOptional: String? = "some"
var someOtherOptional: String?
if let constantName = someOptional, let anotherConstantName = someOtherOptional{
    print("多个可选绑定可以用逗号分隔, 需要每一个语句都为true")
}
// 隐式解析可选类型(implicitly unwrapped optionals): 一个可以自动解析的可选类型
let possibleString: String? = "An optional string."
let forcedString: String = possibleString!                                      // 需要惊叹号来获取值
let assumedString: String! = "An implicitly unwrapped optional string."
let implicitString: String = assumedString                                      // 不需要感叹号
if assumedString != nil {
    print(assumedString)
}

13 错误处理

func canThrowAnErrow() throws {
    // 这个函数有可能抛出错误
}
do {
    try canThrowAnErrow() // 没有错误消息抛出
} catch {
    // 有一个错误消息抛出
}
enum myError: Error {
    case OutOfCleanDishes
    case MissingIngredients
}
func makeASandwich() throws {
    // ...
    throw  myError.OutOfCleanDishes
}
do {
    try makeASandwich()
} catch myError.OutOfCleanDishes {
    // washDishes()
} catch myError.MissingIngredients{
    // buyGroceries
}

14 断言(assertion)

let age = -3
//assert(age >= 0, "A person's age cannot be less than zero")

playground文件在andyRon/LearnSwift

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容