3天学会Swift 3.1

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

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

可选类型的定义方法:

var addr : String?

默认为空

[展开全文]

闭包的自动推断

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

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

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

 

[展开全文]

github.com/yagamis/sw

[展开全文]

Double (双精度)

var num:Double=3,7

 

[展开全文]
雪蝶幽兰 · 2019-10-13 · 5.Double 0

常量

1.命名关键词  let 常量名:数据类型=赋值

2.语法: let 

let number:int=1 /let num=1

 

[展开全文]
雪蝶幽兰 · 2019-10-13 · 2.常量 0

类型安全

[展开全文]

swift默认类型是double

[展开全文]
BlackDream · 2019-07-24 · 5.Double 0

老师漏讲了第三点:用序号获取元组的值

课程.0

课程.1

课程.2

 

[展开全文]
hwei · 2019-06-16 · 8.Tuple 0

第五课:Double,时长2:23,在55秒后全是黑屏没有内容

[展开全文]
hwei · 2019-06-16 · 5.Double 0

属性协议:顾名思义,要求遵从者实现以指定的名称实现属性,但具体实现是实例属性或类型属性并不关心。

  • 可以指定要求实现getter或getter + setter。属性必须定义为变量,var。

 

 

  • 遵从实例属性协议1

protocol  FullName  {

      var  fName : String { get }

      var  gName : String { get }

}

struct Student : FullName {

       var gNane: String

       var fNane: String

}

struct Teaher :FullName {

       var gNane: String

       var fNane: String

}

vae student1 =  Student(gName:"小明", fName: "王")

student1.fName

student1.gName

  • 遵从实例属性协议2

class SomeBody :  FullName {

     var title: String?

     var name: String

     init(title:String?, name: String) {

          self.title = title

          self.name = name

}

      var gName: String {

          return name

     }

      var fName: String {

          return title ??  "无名下将"

     }

}

var somebody1 = SomeBody(title: "大帝", name: "亚历山大")

somebody1.gName

somebody1.fName

somebody1.desc

var nobody = SomeBody(titlr: nill , name: "小波"

nobody.fName

nobody.gName

nobody.desc

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]
bingoo · 2019-05-05 · 2.属性协议 0

面向协议编程

协议:方法、属性或一段功能的蓝本。

  • 协议可被类、结构体和枚举“领养”从面“长大成人”。
  • 任何满足协议的“需求”的类型,被称为“遵从”该协议。

protocol AProtocol {

}

protocol BProtocol {

}

 

  • “领养/遵从”若干个协议,用逗号分隔

struct AStruct : AProtocol, BProtocol {

}

 

  • 超类在协议之前

class Name {

}

class GivenName : Name {

}

 

 

[展开全文]

初始化:描述类/结构体/枚举实例化时,属性如何给初始值的方法。形式: 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 · 2019-04-09 · 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()

 

 

 

 

[展开全文]
bingoo · 2019-03-17 · 6.继承 0

类型方法:属于类型本身,无线实例化就可以使用。方法前加关键字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()

 

[展开全文]
bingoo · 2019-03-16 · 4.类型方法 0

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

  • 基因:属性和方法
  • 繁殖:完全克隆和基因交换(继承和变异)
  • 术语:结构体(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("天气未知")

}

 

[展开全文]
bingoo · 2019-03-12 · 19.枚举 0

闭包 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)

 

[展开全文]
bingoo · 2019-03-12 · 17.函数 0

控制流

  • 用来检查和运算各种条件和逻辑的组合控制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("超出范围")

}

 

[展开全文]
bingoo · 2019-03-11 · 16.控制流 0

授课教师

Swift小菜

课程特色

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

学员动态

Exlo 开始学习 1.Hello World
Exlo 加入学习