Studying-Swift :Day01
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Studying-Swift :Day01相关的知识,希望对你有一定的参考价值。
学习地址:http://www.rm5u.com/ 或 http://www.runoob.com/
- 如果创建的是 OS X playground 需要引入 Cocoa; 如果我们想创建 ios playground 则需要引入 UIKit .
-
iPhone或iTouch的宽为320像素,高为480像素,状态栏高为20像素,toobar高为44像素,tabbar高为49像素,导航栏高为44像素。
-
typealias:类型别名对当前的类型定义了另一个名字;
-
Swfit语言定义后缀?作为命名类型Optional(可选)的简写;
var optionalInteger: Int? //或者 var optionalInteger: Optional<Int>
-
强制解析:当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。
var myString:String? myString = "Hello, Swift!" if myString != nil { // 强制解析 print( myString! ) } else { print("myString 值为 nil") }
注意:使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。
-
自动解析:你可以在声明可选变量时使用感叹号(!)替换问号(?)。
var myString:String! myString = "Hello, Swift!" if myString != nil { print(myString) } else { print("myString 值为 nil") }
-
可选绑定:使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。
if let constantName = someOptional { statements } // example : var myString : String? myString = "Hello, Swift!" if let yourString = myString { print("你的字符串值为 - \(yourString)") } else { print("你的字符串没有值") }
- 整型字面量可以是一个十进制,二进制,八进制或十六进制常量。 二进制前缀为 0b,八进制前缀为 0o,十六进制前缀为 0x,十进制没有前缀
let decimalInteger = 17 // 17 - 十进制表示 let binaryInteger = 0b10001 // 17 - 二进制表示 let octalInteger = 0o21 // 17 - 八进制表示 let hexadecimalInteger = 0x11 // 17 - 十六进制表示
-
注意:Swift中的字母采用的是Unicode编码[1]。Unicode叫做统一编码制,它包含了亚洲文字编码,如中文、日文、韩文等字符,甚至是我们在聊天工具中使用的表情符号
如果一定要使用关键字作为标识符,可以在关键字前后添加重音符号(`) - 浮点型字面量的默认推导类型为 Swift 标准库类型中的 Double,表示64位浮点数。
十进制浮点型字面量 :1.25e2 表示 1.25 ? 10^2,也就是 125.0;同样,1.25e-2 表示 1.25 ? 10^-2,也就是 0.0125。
十六进制浮点型字面量:0xFp2 表示 15 ? 2^2,也就是 60;同样,0xFp-2 表示 15 ? 2^-2,也就是 3.75。
eg: 浮点型字面量允许使用下划线 _ 来增强数字的可读性,下划线会被系统忽略,因此不会影响字面量的值。同样地,也可以在数字前加 0,并不会影响字面量的值。 -
字符串型字面量:
转移字符 含义 \0 空字符 \\ 反斜线 \ \b 退格(BS) ,将当前位置移到前一列 \f 换页(FF),将当前位置移到下页开头 \n 换行符 \r 回车符 \t 水平制表符 \v 垂直制表符 \‘ 单引号 \" 双引号 \000 1到3位八进制数所代表的任意字符 \xhh... 1到2位十六进制所代表的任意字符 - 位运算符:位运算符用来对二进制位进行操作,~,&,|,^分别为取反,按位与与,按位与或,按位与异或运算,如下表实例:
p q p & q p | q p ^ q 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 1 指定 A = 0011 1100 ; B = 0000 1101
运算符 描述 图解 实例 & 按位与。按位与运算符对两个数进行操作,然后返回一个新的数,这个数的每个位都需要两个输入数的同一位都为1时才为1。 (A & B) 结果为 12, 二进制为 0000 1100 | 按位或。按位或运算符|比较两个数,然后返回一个新的数,这个数的每一位设置1的条件是两个输入数的同一位都不为0(即任意一个为1,或都为1)。 (A | B) 结果为 61, 二进制为 0011 1101 ^ 按位异或. 按位异或运算符^比较两个数,然后返回一个数,这个数的每个位设为1的条件是两个输入数的同一位不同,如果相同就设为0。 (A ^ B) 结果为 49, 二进制为 0011 0001 ~ 按位取反运算符~对一个操作数的每一位都取反。 (~A ) 结果为 -61, 二进制为 1100 0011 in 2‘s complement form. << 按位左移。左移操作符(<<)将操作数的所有位向左移动指定的位数。 下图展示了11111111 << 1(11111111 左移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。
A << 2 结果为 240, 二进制为 1111 0000 >> 按位右移。右移操作符(<<)将操作数的所有位向又移动指定的位数。 下图展示了11111111 >> 1(11111111 右移一位)的结果。蓝色数字表示被移动位,灰色表示被丢弃位,空位用橙色的0填充。
A >> 2 结果为 15, 二进制为 0000 1111 - 赋值运算:
运算符 描述 实例 = 简单的赋值运算,指定右边操作数赋值给左边的操作数。 C = A + B 将 A + B 的运算结果赋值给 C += 相加后再赋值,将左右两边的操作数相加后再赋值给左边的操作数。 C += A 相当于 C = C + A -= 相减后再赋值,将左右两边的操作数相减后再赋值给左边的操作数。 C -= A 相当于 C = C - A *= 相乘后再赋值,将左右两边的操作数相乘后再赋值给左边的操作数。 C *= A 相当于 C = C * A /= 相除后再赋值,将左右两边的操作数相除后再赋值给左边的操作数。 C /= A 相当于 C = C / A %= 求余后再赋值,将左右两边的操作数求余后再赋值给左边的操作数。 C %= A 相当于 C = C % A <<= 按位左移后再赋值 C <<= 2 相当于 C = C << 2 >>= 按位右移后再赋值 C >>= 2 相当于 C = C >> 2 &= 按位与运算后赋值 C &= 2 相当于 C = C & 2 ^= 按位异或运算符后再赋值 C ^= 2 相当于 C = C ^ 2 |= 按位或运算后再赋值 C |= 2 相当于 C = C | 2 - 区间运算符:
运算符 描述 实例 闭区间运算符 闭区间运算符(a...b)定义一个包含从a到b(包括a和b)的所有值的区间,b必须大于等于a。 闭区间运算符在迭代一个区间的所有值时是非常有用的,如在for-in循环中: 1...5 区间值为 1, 2, 3, 4 和 5 半开区间运算符 半开区间(a..<b)定义一个从a到b但不包括b的区间。 之所以称为半开区间,是因为该区间包含第一个值而不包括最后的值。<="" td=""> 1..< 5 区间值为 1, 2, 3, 和 4 - 三目运算符:(
a ? b : c) -- 如果a为true,值为b,否则为c.
运算符优先级:
- 指针最优,单目运算优于双目运算。如正负号。
- 先乘除(模),后加减。
- 先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7 等价于 (1 << (3 + 2))&7
- 逻辑运算最后计算
运算符类型 运算符 结合方向 表达式运算 () [] . expr++ expr-- 左到右 一元运算符 * & + - ! ~ ++expr --expr
* / %
+ -
>> <<
< > <= >=
== !=
右到左 位运算符 &
^
|
&&
||
左到右 三元运算符 ?: 右到左 赋值运算符 = += -= *= /= %= >>= <<= &= ^= |= 右到左 逗号 , 左到右 - Swift 条件语句
语句 描述 if 语句 由一个布尔表达式和一个或多个执行语句组成。 if 语句 后可以有可选的 else 语句, else 语句在布尔表达式为 false 时执行。 if 后可以有可选的 else if...else 语句, else if...else 语句常用于多个条件判断。 你可以在 if 或 else if 中内嵌 if 或 else if 语句。 switch 语句允许测试一个变量等于多个值时的情况。 - Swift 循环
循环类型 描述 遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。 用来重复执行一系列语句直到达成特定条件达成,一般通过在每次循环完成后增加计数器的值来实现。 运行一系列语句,如果条件为true,会重复运行,直到条件变为false。 类似 while 语句区别在于判断循环条件之前,先执行一次循环的代码块。
控制语句 描述 告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。 中断当前循环。 如果在一个case执行完后,继续执行下面的case,需要使用fallthrough(贯穿)关键字。 - Swift 字符串
创建字符串:你可以通过使用字符串字面量或 String 类的实例来创建一个字符串:
import UIKit // 使用字符串字面量 var stringA = "Hello, World!" print( stringA ) // String 实例化 var stringB = String("Hello, World!") print( stringB )
空字符串:你可以使用空的字符串字面量赋值给变量或初始化一个String类的实例来初始值一个空的字符串。 我们可以使用字符串属性 isEmpty 来判断字符串是否为空:
import UIKit // 使用字符串字面量创建空字符串 var stringA = "" if stringA.isEmpty { print( "stringA 是空的" ) } else { print( "stringA 不是空的" ) } // 实例化 String 类来创建空字符串 let stringB = String() if stringB.isEmpty { print( "stringB 是空的" ) } else { print( "stringB 不是空的" ) }
字符串常量:你可以将一个字符串赋值给一个变量或常量,变量是可修改的,常量是不可修改的。
字符串中插入值:字符串插值是一种构建新字符串的方式,可以在其中包含常量、变量、字面量和表达式。 您插入的字符串字面量的每一项都在以反斜线为前缀的圆括号中:import UIKit var varA = 20 let constA = 100 var varC:Float = 20.0 var stringA = "\(varA) 乘以 \(constA) 等于 \(varC * 100)" print( stringA )
字符串连接:字符串可以通过 + 号来连接。
字符串长度:字符串长度使用 String.characters.count 属性来计算
字符串比较:可以使用 == 来比较两个字符串是否相等
Unicode 字符串:Unicode 是一个国际标准,用于文本的编码,Swift 的 String 类型是基于 Unicode建立的。你可以循环迭代出字符串中 UTF-8 与 UTF-16 的编码,实例如下:import UIKit var unicodeString = "学习教程" print("UTF-8 编码: ") for code in unicodeString.utf8 { print("\(code) ") } print("\n") print("UTF-16 编码: ") for code in unicodeString.utf16 { print("\(code) ") }
字符串函数以及运算符:
序号 函数/运算符 & 描述 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 <
比较两个字符串,对两个字符串的字母逐一比较。
13 !=
比较两个字符串是否不相等。
- Swift 字符(Character)
Swift 的字符是一个单一的字符字符串字面量,数据类型为 Character:import UIKit let char1: Character = "A" let char2: Character = "B" print("char1 的值为 \(char1)") print("char2 的值为 \(char2)")
注意:如果想在 Character(字符) 类型的常量中存储更多的字符,则程序执行会报错。
Swift 中不能创建空的 Character(字符) 类型变量或常量。
遍历字符串中的字符:Swift 的 String 类型表示特定序列的 Character(字符) 类型值的集合; 每一个字符值代表一个 Unicode 字符;您可通过for-in循环来遍历字符串中的characters属性来获取每一个字符的值:import UIKit for ch in "Hello".characters { print(ch) }
字符串连接字符:使用 String 的 append() 方法来实现字符串连接字符:
import UIKit var varA:String = "Hello " let varB:Character = "G" varA.append( varB ) print("varC = \(varA)")
- Swift 数组
创建数组:
可以使用构造语法来创建一个由特定数据类型构成的空数组:
var someArray = [someType]()
创建一个初始化大小数组的语法:
var someArray = [someType](count: NumberofElements, repeatedValues: InitialValue)
创建一个类型为Int,大小为3,初始值为0的空数组:
var someInts = [Int](count: 3, repeatedValues: 0)
创建含有三个元素的数组:
var someInts:[Int] = [10,20,30]访问数组:我们可以根据数组的索引来访问数组的元素:
var someVar = someArray[index]修改数组:可以使用 append() 方法或者赋值运算符 += 在数组末尾添加元素,如下所示,我们初始化一个数组,并向其添 加元素,也可以通过索引修改数组元素的值。
遍历数组:可以使用for-in循环来遍历所有数组中的数据项,如果我们同时需要每个数据项的值和索引值,可以使用 String 的 enumerate() 方法来进行数组遍历:
import UIKit var someStrs = [String]() someStrs.append("Apple") someStrs.append("Amazon") someStrs.append("Runoob") someStrs += ["Google"] for (index, item) in someStrs.enumerate() { print("在 index = \(index) 位置上的值为 \(item)") }
合并数组:我们可以使用加法操作符(+)来合并两种已存在的相同类型数组。新数组的数据类型会从两个数组的数据类型中 推断出来。
isEmpty属性:可以通过只读属性 isEmpty 来判断数组是否为空,返回布尔值;
Count属性:可以使用count属性来计算数组元素个数;
以上是关于Studying-Swift :Day01的主要内容,如果未能解决你的问题,请参考以下文章
19 01 11 javascript ?????????????????????(???????????????) ??????????????????????????????(代码片段