3天学会Swift 3.1

快速学Swift? 有3天,就够了!化繁为简,去粗存精

默认教学计划
2829人加入学习
(13人评价)
价格 免费
教学计划

初始化:描述类/结构体/枚举实例化时,属性如何给初始值的方法。形式: init(){ }。此方法称之为构造器。

  • 类的定义没有给属性默认的值,则须在init中指定。

class RoomTemp {

      var season : String

      var temp : Int

     init(season: String, temp: Int) {

         self.season = season

         self.temp = temp

     } 

}

let temp1 = RoomTemp(season: "Spring", temp:      20)

temp1.season

temp1.temp

  • 结构体定义不需要指定属性默认值,因为默认提供一个包含所有属性初始化的构造器。

struct RoomTemp1 {

      var season =  "winter"

      var temp = 0

}

let temp2 = RoomTemp1()

  • 便利构造器: 可以通过对主构造器的包装,实现便利的初始化。

class Food {

     var name :String

     init(name: String) {

          self.name = name

    }

}

let food = Food()

  • 可失败构造器: 针对有可能的初始化失败,返回nil。

 

 

[展开全文]
bingoo · 13天前 · 7.初始化 0

继承:class之间的“父子”关系的体现。

  • 子类可以继承父类的属性和方法

class Viechle {

       var speed = 0

       var desc : String {

              return "时速是\(speed)km/h"

       }

}

class Bike : Viechle {

      var hasBasket = ture

}

let aBike = Bike()

aBike.speed = 30

aBike.desc

aBike.hasBasket

aBike.makeNoise()

  • 子类可以根据需要,修改继承来的属性和方法(多态)

class CRH: Viechle {

      override func makeNoise() {

             print("dududu")

        }

}

let crh = CRH()

crh.makeNoise()

 

 

 

 

[展开全文]

类型方法:属于类型本身,无线实例化就可以使用。方法前加关键字static

  • 对于类,加关键字class,可被子类重写(override)

class player {

      staic var nick = "xiaobo"

      class func sever() {

           print("\(nick), 您在北京联通1区")

      }

}

player.sever()

class shanghaiplayer {

    override  static func sever() {

           print(nick, 您在上海电信2区")

      }

}

shanghaiplayer.sever()

 

[展开全文]

用生物的角度把变量和有机组织起来,叫面向对象编程

  • 基因:属性和方法
  • 繁殖:完全克隆和基因交换(继承和变异)
  • 术语:结构体(struct)和类(class),Swift3推荐自己定义的对象使用结构体。

属性是一个类/结构体/枚举关联的变量。

  • 实例属性:实例化后才能使用。
  • 存储属性:保存单个类型的变量。

 class 角色 {

        var id =  ""

       var money = 0

}

let xiaobo = 角色()

xiaobo.id = "小波"

xiaobo.money = 5000

  • 计算属性:由其他属性计算得出的。由getter和setter组成。
  • getter获取器(必须):描述属性如何计算及返回语句,形式:get{语句和返回}
  • setter设置器(可选):有新值(newValue)后如何影响其他属性。形式:set{语句}。
  • 例子,游戏角色的当前坐标,通常是移动方式代表的位移量相关。

struct 坐标 {

      var x = 0, y = 0

}

enum 移动方式 {

       case 走

      case 跑

       case 骑

     case 传送

}

class 法师: 角色 {

      var 人物坐标 = 坐标()

      var 人物移动方式 = 移动方式.走

 

      var 当前坐标: 坐标 {

            get {

                 switch 人物移动方式 {

                 case .走:

                        人物坐标.x += 1

                        人物坐标.y += 1

                 case .跑:

                        人物坐标.x += 3

                        人物坐标.y += 3

                 case .骑:

                        人物坐标.x += 10

                        人物坐标.y += 10

                 case .传送:

                        人物坐标.x += 1000

                        人物坐标.y += 1000

                  }

                 return 人物坐标

            }

           set {

                人物坐标 = newValue

          }

     } 

}

var 法师1 = 法师()

法师1.当前坐标

法师1.人物移动方式 = .跑

法师1.当前坐标

法师1.人物移动方式 = .传送

法师1.当前坐标

//计算属性的settr方法,影响其他属性

法师1.当前坐标 = 坐标(x: 2000, y: 90)

法师1.人物坐标

  • 属性监视器:对属性值得变化进行响应。
  • willSet: 事前响应。新值newValue
  • didSet:事后响应。旧值oldValue

class 经验 {

      var 总经验 = 0 {

            willSet  {

                 print("当前总经验是:\(newValue)!")

            }

           didSet {

                  print("增加了\(总经验 - oldValue)点经验!")

           }

      }

}

var 经验1 = 经验()

//经验1.总经验 = 1000

//经验1.总经验 = 3000

//经验1.总经验 = 8000

 

 

 

 

[展开全文]

枚举enumeration

  • 计数、列举(有限的情况);详细叙述之意。“增强的、更抽象型”的数字类型。
  • 非常强大,与switch语句结合使用,天生一对。

定义和使用:

  • 给定一个名称,然后把每一种情况列举出来。

enum weather {

       case sunny

       case cloudy

       case rainy

       case snow

      case froggy

}

  • 使用:点语法

weather.cloudy

  • 与switch配合使用。如果变量是枚举值,可省略枚举名

var todayweather = weather.sunny

switch todayweather {

case .cloudy:

       print("今天天气多云")

case .sunny:

       print("天气晴朗")

default:

       print("天气未知")

}

 

[展开全文]

闭包 Closure

  • 闭包是一种函数的简写形式,省去函数名,把参数和返回值放入花括号内。

闭包表达式

  • 有时候需要更简洁的使用函数的方式
  • 尤其是一个函数的某参数是另一个函数时
  • 这节主要以sort函数为例

var city = ["zhengzhou","xiamen","hefei","nanchang"]

  • sorted函数用于对数组排序,只接受一个函数型参数,描述排序逻辑。

var cityRank1 = city.sorted()

 func daoxu(a. String,b:String) -> Bool {

       return a > b

}

var cityRank2 = city.sorted(by: daoxu)

  • 用闭包表达式来改写:

var cityRank3 = city.sorted { (a, b) -> Bool in

      return a > b

}

  • 闭包的自动推断
  • 1、参数和返回类型可自动推断,单表达式可以忽略return关键词

var cityRank4 = city.sorted { (a,b) in

      a > b

}

  • 2、可使用快捷参数,前缀$,从0开始递增

var cityRank5 = city.sorted { $0 > $1 }

cityRank5

 

[展开全文]

函数

  • 函数是一段代码块和一个会意的名字,用于执行特定的任务
  • 使用函数叫“调用(call)”
  • 就像公式一样,使用函数需要提供参数
  • 函数调用的结果叫返回值
  • 函数都有类型,包含参数和返回值类型

定义函数

  • 形式:Func函数名(参数1:类型,参数2:类型,···)->返回结果的类型{执行语句}
  • 调用:var变量名称 = 函数名(变量1,变量2,···)
  • 加法函数

func add(x: Int, y: Int) -> Int {

      return x + y

}

var z = add(x: -100, y: 201)

  • 无参数返回值,一般用于执行一系列操作,不需要结果。

func welcome() {

      print("欢迎")

      print("学习")

      print("swift")

}

welcome()

 

  • 多返回值(使用元组)

func maxMin() -> (Int, Int) {

      return (Int.min, Int.max)

}

maxMin().0

maxMin().1

  • 参数以 名称:类型 列出,多个参数用逗号分隔

func add(x. Int, y. Int, z: Int) -> Int {

      return x + y + z

}

  • 可以给某个参数以默认值

func add2(x :Int, increment : Int = 2) -> Int {

      return x + increment

}

add2(x: 3)

  • 函数类型:包含参数和返回类型的简写形式,可以像普通变量那样使用,一般用于函数式编程。(Int,Int) -> Int

func calculate(x: Int, y: Int, method: (Int,Int)->Int ) -> Int {

      return method(x, y)

}

func add(x: Int, y Int) -> Int {

      return x + y

}

func multiply(x: Int, y: Int) -> Int {

      return x * y

}

calculate(x: 3, y: 4, method: add)

calculate(x: 5, y: 6, method: multiply)

 

[展开全文]

控制流

  • 用来检查和运算各种条件和逻辑的组合控制APP的运行流向。
  • 循环语句for-in,while
  • if和循环控制语句
  • 早退语句guard else(选修)
  • 退出循环语句break continue
  • switch

 

for-in循环 执行固定次数的操作,或操作一个序列(如数组)中的每一项。

  • 1、序列中的每项都参与,for与in之间加一个代替每项的名。

let places = ["beijing","shanghai"]

for place in places {

     print(place)

}

0到100的累加

var sum = 0

for i in 1...100 {

     sum += i

}

sum

  • 2、只需要循环固定次数,可以省略项名。比如打印5次相同的文本。

for _ in 1...10 {

     print("学习swift")

}

while循环执行一系列操作,直到条件不成立。使用场合执行次数未知

  • 格式;while条件 {语句}。比如计算1到100的和。

var i = 1

var sum = 0

while i <= 100 {

      sum += i

      i +=1

}

sum

i

根据条件做不同的分支处理。if else

循环中的判断

  • continue结束本次循环,break结束整个循环

var temp = 23

if temp > 35 {

     print("开空调")

} else {

     print("不开空调")

}

到3结束循环

for i in 1...10 {

     if i == 3 {

         break

      }

      print(i)

}

无3的循环

for i in 1...10 {

     if i == 3 {

         continue

      }

      print(i)

}

seitch语句

  • switch语句:超过2个以上条件判断的场合。
  • 条件的模式匹配

范围匹配:如根据室外温度来自动调节室内温度的空调

var temp = 30

switch temp {

case 35...40:

      print("天气炎热")

case 20...34:

      print("天气一般")

case 15...19:

      print("天气凉爽")

default:

      print("超出范围")

}

 

[展开全文]

字典:值无序可重复,但每个值有唯一的键(Key)

  • 定义:Dictionary<键类型,值类型>,或[键类型:值类型]

var a : Dictionary<String,String>

var b: [String:String]

  • 用字典字面量来创建字典,键与值之间用冒号隔开。

var airports = ["PVG":"Shanghai Pudong"]

  • 添加或更新:字典变量[键] = 值

airports["SHQ"] = "Hongqiao Airport"

  • 获取,依然可以用下标

airports["PVG"]

  • 移除,用下标把值设为nil

airports["PVG"] = nil

  • 循环一个字典for in,因为键值对有两个元素,用元组变量。

for (key, value) in airports {

     print(key,value)

}

 

[展开全文]

集合(Set):值无序不重复。适合存储具有唯一性的数据,如用户名/身份证号码等等

  • 定义:Set<元素类型>,无法使用类型推断,但可省略类型。

let cardno : Set = [1,2,3]

  • 集合间的运算:交差并补

1、交集 intersection

var x :Set = [1,2,3,4]

var y :Set = [3,4,5,6]

x.interction(y)

2、差集 subtract

x.subtract(y)

3、并集 union

x.union(y)

4、补集 symmetricDifference

x.symmetricDifference(y)

  • 集合间的关系

1、子集:isSupersetOf(可以相等),严格子集isStrictSubset

let h : Set = [1,2,3]

let i : Set = [3,2,4,1]

h.isSubset(of: i)

h.isStrictSubset(of: i)

2、父集:isSupersetOf(可以相等),严格父集isStrictSuperSetOf

i.isSupersetOf(of: h)

i.isStrictSuperSetOf(of: h)

3、无交集:isDisjoint

let j : Set = [1,2,3]

let k : Set = [4,5,6]

j.isDisjoint(with: k)

 

 

 

[展开全文]

集合类型

  • 一组同类型的值组合,根据组合的整体特性分为:
  • 有序可重复-数组(Array)

创建一个有序范围的Int数组,Array(起始值···终止值)

let array = Array(1...10)

用数组字面来创建数组:[值1,值2,值3,、、值N]

var places = ["beijing","shanghai"]

元素计数:count,  空否:isEmpty

places.count

places.isEmpty

➕添加:append,添加一个同类型数组  +=

places.append("wuhan")

let haiwai = ["NuwYork"]

places += haiwai

获取元素:数组名[索引],索引总是从0开始

places.count

places[3]

插入:insert

places.insert("guiling", at: 3)

移除:remove

places.remove(at: 2)

places

 

  • 无序不重复-Set
  • 无序可重复,但每个值有唯一的键(Key)-字典(Dictionary)
  • 批量处理集合中的元素,可以使用for in 循环※
  •  
[展开全文]

字符串和字符

  • 字符串是有序的字符集合,或者叫文本。如“今天天气真好”
  • String是字符串类型,Character是字符类型
  • 2个字符串可以通过 + 来连接。
  • 通过字符串插值可合成一个长字符串✅

字符串字面量,包含双引号""的值成为字符串字面量

"回到世界之巅"

空字符串:用""字面量

var a = ""

var b ="    "

  • 判断字符串是否为空

a . isEmpty  =  true

b . isEmpty =   false

用Character类型来定义单个字符

var a : Character = "我"

var b : Character = "我们"   ❌

可以对一个字符串的charcters属性进行循环,来访问其中单个字符。

let words = "小波说雨燕"

for word in word . character {

     print (word)

}

连接字符串和字符

  • 用 +

let a = "今天"

let b = "天气"

let famous = a + b         "今天天气"

  • 向字符串添加字符,用append方法

let number : Character = "1"

famous. append(number)      "今天天气1"

字符串插值:组合变量/变量/字面量/表达式成一个长字符串

let name = "小波"

let type = "G"

let number = 11

let price = 158.5

let 订票提示 = "\(name)先生,您订购了\(type)\(number)的往返票,需要支付\(price*2)元。"

小波先生,您订购了G11的往返票,需要支付317.0元。

[展开全文]

术语

  • 操作几个对象,被称之为几元操作符
  • 操作一个目标,是一元操作符。

var a = 6

let b= -a

  • 二元操作符操作2个目标,在2个目标之间,前后用空格分隔。

3 + 4

赋值操作符

  • 用等号右边的值来更新左边变量的值

var a = 4

a = 5

  • 数学操作符:= - * / %

%是取余:13 % 3 = 1

  • 组合赋值:赋值与数学操作符的组合,比如 + =

var a = 1

a += 2     a = a + 2     以此类推

  • 比较操作符: > >= < <= .结果是true或false.

1 > 2     false

1 >=1     true

逻辑操作符:Bool值的组合

  • 与:每项全部为true,整体为true

true && false && true = false

  • 或:有一项为true,整体为true

true | | false | | true = true

  • 非:对Bool值取反

let a = true

! a =false

[展开全文]

可选类型(Optional):代表变量可能有值的情况。

  • 如:用户资料的选填部分,如住址/性别等辅助信息
  • 形式:var变量:类型,默认是无值(nill)

var addr : String?

addr = "上海大学"

[展开全文]

元组(Tuple):定义变量的一个组合。

  • 形式(一般):(3,“天”,“Swift”,“3.0”)
  • 形式(前缀):(day:3,unit:"天",lang:"Swift",ver:"3.0")
  • 要获取其中的某个值,用序号或前缀

var 课程名 = (day : 3, unit : "天", lang : "Swift", ver : "3.0")

课程名.day

课程名.unit

课程名.ver

[展开全文]
bingoo · 03-10 · 8.Tuple 0

布尔型:Bool,表示逻辑上的“真”或“假”

  • 只有2个值,true和false

var vip = false

vip = true

[展开全文]
bingoo · 03-10 · 7.Bool 0

类型安全

  • 变量一旦定义,其类型不可更改,即:不能给变量一个类型不同的值,

var 电费 = 3.5

电费 = 5.0 

电费 = "五毛"❌

[展开全文]

浮点型(小数)

  • Swift中默认浮点型是Double(双精度)

var 一杯水 : Double = 3.5

[展开全文]

值得类型和类型推断

  • 3这样的整数,在Swift中称为Integer类型的值,简写Int
  • 形式:var 变量名 : Int = 3 .由于Swift有类型推断,类型可以省略不写。

var 跑步多少公里 = 5

跑步多少公里 = 6

[展开全文]

变量

  • 可主动变更或者可预计期间内自动有规律或者无规律的量,比如清醒时间、风扇转动的总次数、加班时间等等

代码注释

  • 有助于自己理解
  • 便于他人理解
  • 专业优雅
  • 为绿色,不参与代码执行

// 定义了一个圆周率常量,精度为小数点后2位

let π = 3.14

如何正确使用常量于变量?

  • 总是优先使用常量
  • 交给编译器决定

ver 课程名 = "3天学会Swift"

课程名 = "3天学会Swift"

[展开全文]

授课教师

Swift小菜

课程特色

视频(38)
下载资料(13)