Swift学习笔记(一)

Swift 对空格有要求。

Swift数据类型

  • Int 相当于NSInteger,根据不同平台有不同的长度。
  • 无符号类型UInt,尽量不要使用UInt。
  • 浮点数,Double(64位浮点数),Float(32位浮点数)。
  • 布尔值,Swift有一个基本的布尔(Boolean)类型,叫做Bool。有两个布尔常量true,和False。在OC中为YES,NO.
  • 字符串,String,OC中对应为NSString。
  • 字符,Character,即单个字母。OC中对应为Char。
  • 可选类型,Optional,用来处理值可能缺失的情况。表示有值或没有值

类型别名

typealias,对当前类型定义另一个名字。typealias newStr = String

类型安全

type safe,Swift会在编译代码时进行类型检查(type checks)

类型推断

如果没有显示指定类型,Swift会使用类型推断(type inference)来选择合适的类型。浮点数会优先推断为Double。

Swift可选类型

Swift使用 ? 作为命名类型Optional的简写,Optional是一个含有两种情况的枚举,None和Some(T),用来表示可能或可能没有值。任何类型都可以声明或隐式转换为可选类型,声明时要确保给操作符一个合适的范围。类型和?之间没有空格。以下两种方式等价。

var optionalInt: Int?
var optionalInt2: Optional<Int>

声明可选变量如未给定初始值,默认为nil。

强制解析

当使用操作符声明时,如果确定可选类型包含值一个非nil值,可以在变量后面加上!来强制解析(forced unwrapping)。如果值为nil则会导致运行时错误。

自动解析

声明可选变量时,使用!替换,这样在解析可选变量时就可以不用加上!,以实现自动解析。

可选绑定�

使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值复制给一个临时常量或变量。eg:

// 可选绑定
if let myInt = optionalInt {
    print(myInt)
}

Swift 常量�

Swift常量使用关键字let声明,必须初始值。let constantName = <initial value>

类型标注

声明一个常量或者变量时候可以选择加上类型标注(type annotation),用于说明常量或者变量中要存储的值的类型。使用方法为在常量或者变量后加上冒号空格,然后加上类型名称。 var constantName: <data type> = <optional initial value>

输出

Swift中使用print替换了原来的println函数来输出常量和变量。在字符串中可以使用\()来插入常量和变量。

Swift字面量

字面量:能够直接了当的指出自己的类型并为变量进行赋值的值,如整型字面量、浮点型字面量、字符串型字面量和布尔型字面量。

字符串型字面量的转义

转义字符 含义
\0 空字符
\ 反斜线 \
\b 退格(BS) , 将当前位置移到前一列
\f 换页(FF),将当前位置移到下页开头
\n 换行符
\r 回车符
\t 水平制表符
\v 垂直制表符
' 单引号
" 双引号
\000 1到3位八进制数所代表的任意字符
\xhh... 1到2位十六进制所代表的任意字符

布尔型字面量默认类型为Bool,包含三个值:true , false , nil

Swift运算符

运算符是一个符号,用户告诉编译器执行一个数学或逻辑运算。包含

  • 算数运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 区间运算符(闭区间运算符:...。 半开区间运算符:..<。)
  • 其他运算符(一元加、一元减、三元运算符)

Swift条件语句

语句 描述
if 语句 if 语句由一个布尔表达式和一个或多个执行语句组成。
if...else语句 if 语句后可以有可选的 else 语句, else 语句在布尔表达式为 false 时执行。可用?:代替
if...else if...else 语句 if 后可以有可选的 else if...else 语句, else if...else 语句常用于多个条件判断。
内嵌 if 语句 你可以在 if 或 else if 中内嵌 if 或 else if 语句。
switch 语句 switch 语句允许测试一个变量等于多个值时的情况。

Swift循环

循环类型

循环类型 描述
for-in 遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。
for 循环 用来重复执行一系列语句直到达成特定条件达成,一般通过在每次循环完成后增加计数器的值来实现。
while 循环 运行一系列语句,如果条件为true,会重复运行,直到条件变为false。
repeat...while 循环 类似 while 语句区别在于判断循环条件之前,先执行一次循环的代码块。类似于do...while。

循环控制语句

控制语句 描述
continue 语句 告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。
break 语句 中断当前循环。
fallthrough 语句 如果在一个case执行完后,继续执行下面的case,需要使用fallthrough(贯穿)关键字。

Swift字符串

Swift字符串类型为String

字符串创建

var stringA = "I`m string" // 字面量创建
var stringB = String("I`m string too") // String实例化,不推荐

空字符串

创建空字符串:

var stringA = "" // 字面量创建
var stringB = String() // String实例化创建

isEmpty可用来判断字符串是否为空!

字符串连接

字符串可通过+来连接

字符串长度

字符串可通过String.characters.count属性来计算

字符串比较

字符串通过==来比较是否相等

字符串函数和运算符

  1. isEmpty 判断字符串是否为空,返回布尔值
  2. hasPrefix(prefix: String) ,检查字符串是否拥有特定后缀
  3. hasSuffix(suffix: String) ,检查字符串是否拥有特定后缀。
  4. Int(String) ,转换字符串数字为整型。 实例: let myString: String = "256" let myInt: Int? = Int(myString)
  5. String.characters.count ,计算字符串的长度
  6. utf8 ,您可以通过遍历 String 的 utf8 属性来访问它的 UTF-8 编码
  7. utf16 ,您可以通过遍历 String 的 utf8 属性来访问它的 UTF-16 编码
  8. unicodeScalars 您可以通过遍历String值的unicodeScalars属性来访问它的 Unicode 标量编码.
    • 连接两个字符串,并返回一个新的字符串
  9. += 连接操作符两边的字符串并将新字符串赋值给左边的操作符变量
  10. == 判断两个字符串是否相等
  11. < 比较两个字符串,对两个字符串的字母逐一比较。
  12. != 比较两个字符串�是否不相等。

swift字符

Swift字符数据类型为Character.Swift无法创建空的Character类型的变量或常量。

遍历字符串中的字符

for ch in "I`m string".characters {
    print(ch)
}

字符串连接字符

可以使用String的append(c: Character)来连接字符

var char: Character = "A"
stringA.append(char)
print(stringA)

Swift数组

Swift中数组的数据类型为Array,使用有序列表存储同一类型的多个值。Swift中的数组元素类型没有限制。

创建数组

var emptyArray = [someType]() // 空数组
var sizeArray = [someType](repeating: 0, count: 3) // 大小为3,初始值为0的数组
var someArray = [1,2,3] // 直接创建

访问数组

根据数组的索引来访问数组的元素。var someVar = someArray[index]

使用count属性来计算数组元素个数

使用isEmpty属性判断数组是否为空,返回布尔值。

修改数组

  • 通过索引来直接更改元素的值
  • 通过append()方法或者赋值运算符+=在数组末尾添加元素。

遍历数组

  • 使用for in 遍历
  • 使用enumerate()方法进行数组遍历。

合并数组

使用+来合并两种相同类型的数组。新数组的类型会从两个数组的数据类型中推断出来。

Swift字典

Swift字典用来存储无序的相同类型数据的集合。Swift中的Key和Value的类型没有限制。

创建字典

与数组相似。

var emptyDict = [keyType : valueType]() // 空字典
var someDict: [Int : Int] = [1:11, 2: 22] // 字典实例

访问字典

通过字典的索引Key来访问数组元素。var someVar = someDict[key]

使用只读属性count计算字典有多少键值对

使用只读属性isEmpty属性来判断字典是否为空,返回布尔值。

修改字典

  • 通过下标key增加或修改字典。key存在则修改,key不存在则增加
  • 通过updateValue(value: Value, forKey key: Key) -> Value?来增加或修改字典。规则同上。

移除Key-Value

  • 通过设置下标key的Value为nil来移除。
  • 通过removeValue(forKey: Key) -> Value?来移除,若key存在则返回value值,反之返回nil.

遍历字典

  • 使用for-in循环遍历
  • 使用enumerate()进行遍历,返回字典索引和键值对
for (key , value) in someDict {
    print("\(key):\(value)")
}

for (index , value) in someDict.enumerate() {
    print("\(index):\(value)")
}

字典转换为数组

提取字典的键值,并转换为独立的数组。

let arrayKeys = [Int](someDict.keys)
let arrayValues = [Int](someDict.values)

参考:

Swift 教程 | 菜鸟教程

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

推荐阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,776评论 1 10
  • 53.计算字符 在字符串中获取字符值的数量, 可以使用字符串字符属性中的计数属性: let unusualMena...
    无沣阅读 1,070评论 0 4
  • 一直没有时间好好看一下swift,最近复习了一遍语法,这里记录swift学习过程中遇到的一些问题和要点,和Obje...
    bomo阅读 2,334评论 0 25
  • 。net(donet)含义一般指。Net FrameWork框架,是microsoft为开发应用程序二创建的一个具...
    陈果123阅读 242评论 0 0
  • 亲友们,请帮忙投下票呗!818号苑振业http://mp.weixin.qq.com/s/Rmud1JTW1ZKU...
    戒你如烟阅读 144评论 1 1