Swift入门语法

01.常量与变量

·let定义常量,一经赋值不允许再次修改

·var定义变量,赋值之后仍然可以修改

定义常量:let 常量名 = 值 

eg. let n = 10

定义变量:var 变量名 = 值

eg. var m = 20

02.类型推导和类型转换

·swift对数据类型要求非常严格

·swift能够自动根据等号右边的代码,推导出变量的数据类型

·如果需要指定变量的数据类型,可以在变量名后使用‘ : 数据类型 ’

eg. let x: Double = 10

tip:Option + Click可以查看变量的类型

note:如果要对不同类型的数据进行计算,必须做显示的类型转换

03.字符串String

·String是一个结构体,性能优于NSString

·String支持直接遍历

·String具有NSString的绝大多数功能

·String与NSString转换方便

定义字符串:var str = "Hello world"

遍历字符串中的字符:for char in str.characters {...}

字符串的长度:let length = str.characters.count

字符串拼接:let str = "Hello"+"World"

把其他类型的数据转成字符串:

let num = 5

let str = "\(num)"

格式化字符串:

let pi = 3.1415926

let str = String(format: "%.02f", arguments: [pi])

04.Optional可选类型

·定义变量时,在类型后面添加一个‘ ? ’,表示该变量是可选类型

·可选类型表示该变量可能有值,也可能为nil,默认值是nil

·在变量后添加一个‘ ! ’,表示强行解包

note:强行解包必须确保解包后的值不是nil,否则会报错 

let num: Int? = 10

let sum = num! + 20

可选绑定:当可选有值时,进行赋值;可选为nil时,执行else代码

if let number = num {

print(number)

} else {

print("num为nil")

}

05.if条件分支

·在swift中没有非0既真、0为假,swift中Bool类型只有两个值:true/false

·条件必须是Bool类型,或返回Bool类型的表达式

·条件可以省略括号

eg. if score > 60 { print("及格") }

06.循环

·a...b 闭合范围,表示a到b,[a, b],包含a,也包含b

·a..<b 半闭合范围,表示a到b,[a, b),包含a,不包含b

eg. for i in 0...5 { ... }

tip:‘ _ ’表示忽略对应位置的值 for _ in 0...5 { ... }

07.switch

·swift的switch执行完一个case后默认不执行下一个case

switch(score/10) {

case 9 : print("优秀")

case 8 : print("良好")

case 7 : print("中等")

case 6 : print("及格")

default : print("不及格")

}

·如果需要执行下一个case需要使用fallthrough关键字

·swift可以对Float,Bool,String,Int,枚举进行匹配

·必须处理所有可能的情况,不然编译器会报错,不处理的条件可以放在default分支中

08.数组

·swift定义数组

var array = ["BMW", "BENZ", "RR"]

var array1 = [3, 5, 7, 9]

·初始化空数组

var array2: [Int] = []

var array3 = [Int]()

·遍历数组

for n in array { ... }

09.元组

·元组是由2个或以上元素组成的复合类型,元组中每个元素的数据类型都可以不同

·元组定义好后不能添加或减少元素

定义一个元组:let car = (50000, "white", "BMW")

元组访问:car.0

定义元组时,指定元素名称:var car = (price: 50000, brand: "BMW", color: "white")

元组通过元素名称访问:car.brand

修改元组中元素的值:car.color = "yellow"

10.字典

定义字典:var dict = [String: Int]()

字典的遍历:

遍历字典所有的key:for key in dict.keys { ... }

遍历字典所有的value:for value in dict.values { ... }

遍历key和value:for (k, v) in dict { ... }

赋值直接使用dict[key] = value格式

如果 key 不存在,会设置新值

如果 key 存在,会覆盖现有值

11.枚举

·定义枚举类型:

enum Season {

case Spring

case Summer

case Autumn

case Winter

}

·定义一个枚举变量:var season = Season.Spring

12.函数

·函数的定义

func 函数名(形参1: 类型1, 形参2: 类型2, ...) -> 返回值 { ... }

·外部参数名:在形参名前再增加一个外部参数名,能够方便调用人员更好地理解函数的语义

func addStudent(stu_name name: String, stu_age age: Int, stu_number number: Int) { ... }

·函数返回元组

func getStudent() -> (String, Int, Int) { ... }

13.闭包

·闭包类似于 OC 中的 Block,是一段预先定义好的代码,在需要时执行

·闭包表达式格式:

{ (形参名称1: 形参类型1, 形参名称2: 形参类型2, ...) -> 返回值 in //要执行的代码 }

·定义闭包:var closure = { (text:String) ->Void in }

·执行闭包:closure("学习闭包")

14.类的定义

·()里面是空,表示调用类的默认构造函数 = [[类名 alloc] init];

·swift中访问属性通过点语法来访问,方法也是通过点语法来调用

·继承和OC一样,通过 : 来继承,swift也只有单继承

class类名: 父类名{ //: 一些属性//: 一些方法 }

note:覆盖父类方法, 需要加关键字override

实例化类:var man = Person()

15.类的属性

·存数型属性: 存储数据

属性监视器: 当存储型属性发生改变的时候,通知我们属性发生了改变

willSet: 在属性将要发生改变时调用

didSet: 在属性已经发生改变时调用

·计算型属性: 不存储任何数据,通过get方法来返回一个计算好的数据,通过set方法来设置一个存储型属性的值,当只提供get方法时,称之为只读计算属性,必须要有get方法

var height =1.74

var heightCM: Double {

get {

return height *100 

}

set {          

height = newValue / 100 

}  }

16.构造函数

classPerson {

var name: String

}

·以上代码会报:“存储型属性没有初始化值”,原因是在swift中类实例化后,所有的存储型属性必须有值

·解决方法1:定义属性时赋值

·解决方法2:将对象属性类型设置为Optional

利用init函数为属性初始化

·在swift中对象是通过构造函数来实例化的。构造函数的作用:在对象实例化过程中给所有的存储型属性设置初始值,并且执行必要的准备和初始化任务

class Person: NSObject {

var name: String 

var age: Int

override init() {

name ="LDH"

age =22

}  }

重载构造函数

·swift 中支持函数重载,同样的函数名,不一样的参数类型

init(name: String, age: Int) {

self.name = name

self.age = age    }

子类构造函数

·自定义子类时,需要在构造函数中,首先为本类定义的属性设置初始值

·再调用父类的构造函数,初始化父类中定义的属性

·如果子类没有去实现构造函数,会继承父类的构造函数

·如果子类实现了构造函数,不会继承父类的构造函数

init(name: String, age: Int, grade: String) {

self.grade = grade

super.init(name: name, age: age)    }

convenience 构造函数

tip:便利构造函数: 它是辅助性的构造函数,方便创建对象

·默认情况下,所有的构造函数都是指定构造函数Designated

·convenience关键字修饰的构造方法就是便利构造函数

·便利构造函数可以返回nil

·需要调用本类的一个指定构造函数

convenience init?(name: String, age: Int) {

if age <0 || age >120 {

print("年龄不合法")

return nil }

self.init(name: name, age: age)    }

构造函数小结

1.不需要func关键字,名称是固定的,都叫 init

2.当类没有实现构造函数时,系统会添加一个默认的构造函数

3.如果实现了构造函数,系统就不会添加默认构造函数

4.如果子类没有实现构造函数,会继承父类的构造函数

5.子类构造函数需要调用父类构造函数

6.需要先初始化子类属性,再调用父类构造函数

7.子类一旦实现了构造函数,就不会继承父类的构造函数

17.懒加载

·方法1:lazy var p = Person()

·方法2:

lazy var p: Person= {

let person = Person()

// 此处可以对person属性进行设置

return person }()

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

推荐阅读更多精彩内容