References:
某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝。一日,饭后突生雅兴,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:
hello world
。
print("Hello, World")复制代码
值与类型
定义变量用 var
,常量用 let
。常量只能赋值一次,但不用必须在声明的时候去赋值。
var myVariable = 42myVariable = 50let myConstant = 42复制代码
编译器会自动推断常量和变量的类型,但是如果推断不出来(比如说没有初始值等),就需要声明类型。
let helloTalk : StringhelloTalk = "helloTalk"let helloTalk = "helloTalk"复制代码
Swift的值不会隐式被转为其他类型
let widthFloat = 93.33 // 自动推断 为 Doublelet width : Int = widthFloat // 把 Double 赋值给 Int,会报错let widthLabel = label + String(width)// 把值转换成字符串还可以这样: \(ValueName)let widthString = "width: \(width)."复制代码
创建、定义一个数组或者字典
let emptyArray = [String]()let emptyDictionary = [String: Float]()// 或者let emptyArray = []let emptyDictionary = [:]复制代码
数组和字典都是集合类型,对于这种类型的 let
和 var
修饰并非是像普通值的可否赋值。 比如说,用 let
修饰的数组是不能添加和移除数组中的元素,数组中的元素个数、位置均不可变,但是用 var
修饰的数组可以添加/删除元素。
枚举
枚举是为一组相关的值定义了一个共同类型,在 Swift
中,枚举是“一等公民”。枚举成员的原始值不仅可以是整形,还可以是字符、字符串、浮点型;此外,枚举还支持属性、方法、甚至是构造函数、扩展和遵守协议。
用 enum
关键词来创建枚举:
enum Direction { case north case south case east case west}// 或者用逗号分隔写作一行:enum Direction { case north, south, east, west}let direction: Direction = .west复制代码
原始值
enum Direction: String { case north = "北" case south = "南" case east = "东" case west = "西"}let north = Direction.north // the sanme as : let north = Direction(rawValue: "北")north.rawValue // "北"复制代码
关联值
Swift 的枚举可以存储各个类型的关联值,而且每个成员的类型可以都不一样。所以对于一个网络请求可以有这样的抽象:一个网络请求的结果,可以是成功或者失败的,如果成功则返回的是我们想要的数据,不成功返回错误原因,那么可以写成这样:
enum Result{ case success(Value) case failure(Error)}复制代码
Value
是泛型语法,可以是任何你需要的类型。
控制流
for-in
let persons = ["person1","person2"]for personString in persons { print(personString)}// 遍历字典let dict = [ "name" : "Joke", "age" : 16 ] as [String : Any] for (key,value) in dict { print("\(key) : \(value)")}复制代码
if-else
if 2>1 { print("2 大于 1")}else{ print("2 还是大于 1 啊")}复制代码
if
后面必须是布尔表达式,如果是一个值的话不会隐式的与 0 比较。
switch
let vegetable = "red pepper"switch vegetable {case "celery": print("Add some raisins and make ants on a log.")case "cucumber", "watercress": print("That would make a good tea sandwich.")case let x where x.hasSuffix("pepper"): print("Is it a spicy \(x)?")default: print("Everything tastes good in soup.")}复制代码
switch
不仅支持基本数据类型。另外Swift中的switch
语法可以省略break
。但是不能省略 default
,会报 Switch must be exhaustive, consider adding a default clause
的编译错误。
while
var i = 1while i<100 { i += 1}// 或者var i = 1repeat{ i += 1}while i < 100复制代码
我的博客: