星空网 > 软件开发 > 操作系统

Swift之语法2(精简版)

1.可选类型和强制解包(?和!)

 1> 可选类型(?)和强制解包(!)

  在swift中,可选类型(?) 其根源是一个 枚举型,里面有 None 和 Some 两种类型。其实所谓的 nil 就是 Optional.None , 非 nil 就是 Optional.Some.

  可选类型是的数据如果不进行解包的话,它是一个 Optional 类型的数据,如果我们想要使用原来类型的数据,必须进行解包

// 定义一个Int类型的可选类型变量var intNumber:Int? = 8// 把这个类型类型的变量赋值给另一个可选类型的变量var intNumberOne:Int? = intNumberprint(intNumberOne)// 打印出来以后是一个Optional类型的值,如果要取到8,必须对可选类型强制解包!var intNumberTwo:Int = intNumber!print(intNumberTwo)

  打印结果:

Swift之语法2(精简版)images/loading.gif' data-original="data:image/png;base64,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

 2> 可选绑定

  可选类型分为有值和没值,如果可选类型的变量没值时对其强制解包,程序就会崩溃 。所以,强制解包是非常危险的
   示例代码

// 定义一个Int类型的可选类型变量var intNumber:Int?// 把这个类型类型的变量赋值给另一个可选类型的变量var intNumberOne:Int? = intNumberprint(intNumberOne)var intNumberTwo:Int = intNumber!print(intNumberTwo)

   崩溃信息:

Swift之语法2(精简版)

// ! 隐式解析可选类型 : 有值,没值(nil)var intNum: Int! = 10// 如果隐式解析可选类型的变量没值,程序一样会崩溃//var intNumOne = intNum//print(intNumOne)// 可选绑定if var intNumTwo= intNum {  print(intNumTwo)} 

2.结构体

 1> 概述

  Swift的结构体对比OC来说,可以添加初始化方法、可以遵守代理协议等
  声明一个结构体的格式:

   struct + 结构体的名字 + {

      声明成员变量等
   }

 2> 声明一个结构体代码

 1 // 1. 声明一个结构体 2 struct Rect { 3   // 1.1 声明结构体变量的属性(存储属性) 4   var x:Float 5   var y:Float 6   var width:Float 7   var height:Float 8    9   // 1.2 声明结构体属性,要使用static10   static var desciption:String?11   12   // 1.3 声明计算属性(是用来专门计算结构体变量属性的setter和getter方法,其本身并没有存储功能)13   var centerX:Float {14     // setter方法15     set {16 //      x = newValue17       x = x / 218     }19     20     // getter方法,必须要写的方法21     get {22       return x / 223     }24   }25   26   var centerY:Float {27     get {28       return y / 229     }30   }31   32   // 1.4 声明方法33   // 声明一个结构体变量方法(相当于OC中的实例方法)34   35   func frameInfor() {36     print("x:\(x),y:\(y),width:\(width),height:\(height)")37   }38   39   // 声明一个结构体方法(相当于OC中的类方法),使用static修饰40   static func infor() {41     print("这是结构体方法")42   }43   44 }45 46 // 1. 根据结构体去定义一个结构体变量47 var frame = Rect(x: 10, y: 10, width: 100, height: 100)48 49 // 2. 访问结构体变量中的属性50 // 注意:结构体变量的属性类型可以使用let去修饰,只不过访问的时候不能对其进行修改51 print(frame.x)52 53 // 3. 访问结构体属性54 Rect.desciption = "我是结构体属性"55 print(Rect.desciption)56 57 // 4. 访问计算属性58 frame.centerX = 20 // 这句话就相当于在调用centerX的setter方法59 60 let value = frame.centerX // 这句话就相当于在调用centerX的getter方法61 62 print(value)63 print(frame.centerY)64 65 // 5. 调用结构体变量方法66 frame.frameInfor()67 // 6. 调用结构体方法68 Rect.infor()

 3> 代码解析

  • 声明一个结构体

  声明:代码 1 - 44行,定义一个结构体变量和对结构体的相关操作:代码46 - 68行

  结构体不需要重写初始化方法,直接可以定义一个结构体变量,代码:46 - 47

  • 声明结构体变量的属性(存储属性)

  声明:代码 3 - 7行,访问:代码49 - 50行

  结构体变量的属性可以是变量(var),也可以是常量(let),以上代码以var为例

  • 声明结构体属性

  声明:代码 9 - 10行,访问:代码53 - 55行

  要使用 static 修饰,必须由 结构体 进行访问

  • 声明计算属性

  声明:代码 12 - 30行,访问:代码57 - 63行

  用来专门计算结构体变量属性的 setter 和 getter 方法,其本身并没有存储功能,相当于OC中重写的 setter 和 getter 方法

  • 声明结构体变量方法

  声明:代码 33 - 37行,访问:代码65 - 66行

  相当于OC中的实例方法

  • 声明结构体方法

  声明:代码 39 - 42行,访问:代码67 - 68行

  使用 static 修饰,相当于OC中的类方法

  注意:类方法中只能使用 类属性,不能使用 对象属性

3.类

 1> 概述

  类是人们构建代码所用的一种通用且灵活的构造体。我们可以使用与结构体完全相同的语法规则来为类定义属性(常量、变量)和添加方法。

  我们通过关键字class来定义类,并在一对大括号中定义它们的具体内容:

   class ClassName {

    类的内部细节

   }

 2> 声明一个父类和子类的代码

 1 class Person { 2   // 1.2 对象属性 3   var name:String? 4   var age:Int? 5    6   // 1.3 声明类属性 7   static var introduce:String? 8    9   // 1.4 计算属性10   var value:Int {11     set {12       age = newValue // 在写计算属性的时候,一定不能出现self,不然会出现死循环13     }14     15     get {16       return age!17     }18   }19   20   // 1.1 构造初始化方法21   init(name:String, age:Int) {22     self.name = name23     self.age = age24   }25   // 自定义初始化方法26   init(name:String) {27     self.name = name28   }29   30   // 1.5 声明一个类方法31   // 1.5.1 在类方法前面加上一个static修饰【虽然是一个类方法,但是该方法在子类中不能进行重写】32   static func sayHi() {33     print(introduce) // 注意:只能使用类属性,不能使用对象属性34   }35   // 1.5.2 在类方法前面加上class修饰【它是一个类方法,可以被子类重写】36   class func sayHello() {37     print(introduce)38   }39   40   // 1.6 声明一个实例(对象)方法41   func sayHi1() {42     print("我是实例方法")43   }44 }45 46 // 1. 创建对象(注意:要初始化方法)47 var per : Person = Person(name: "MBBoy", age: 20)48 49 // 2. 访问类中的属性50 // ! 解包后为原有属性(打印结果: MBBoy ),不解包为Optional属性(打印结果 Optional(20) )51 print(per.name!)52 print(per.age)53 54 // 3. 访问类属性55 Person.introduce = "我是xxx"56 57 // 4. 访问计算属性58 per.value = 2859 print(per.value)60 61 // 5. 访问类方法62 Person.sayHello()63 Person.sayHi()64 65 // 6. 访问实例方法66 per.sayHi1()67 68 // 定义一个子类Student,继承Person69 // Swift不支持多继承70 class Student:Person {71   // 重写父类的方法72   // 重写父类的类方法73   override class func sayHello() {74     print("我是子类Student,重写父类的类方法")75   }76   77   // 重写父类的实例方法78   override func sayHi1() {79     print("我是子类Student,重写父类的实例方法")80   }81 }82 83 // 初始化Student对象84 var stu = Student(name: "张三", age: 25)

 3> 代码解析

  • 声明父类

  声明:代码 1 - 44行,初始化对象和对对象的相关操作:46 - 66行

  • 重写初始化方法

  重写:代码 20 - 28行,创建对象:代码 46 - 47行

  与结构体不同,类的初始化方法必须重写,不然不能创建对象

  • 声明对象的属性(实例属性)

  声明:代码 2 - 4行,访问:代码49 - 52行

  对象的属性可以是变量(var),也可以是常量(let),以上代码以var为例

  • 声明类属性

  声明:代码 6 - 7行,访问:代码54 - 55行

  要使用 static 修饰,必须由 类名 进行访问

  • 声明计算属性

  声明:代码 9 - 18行,访问:代码57 - 59行

  用来专门计算结构体变量属性的 setter 和 getter 方法,其本身并没有存储功能,相当于OC中重写的 setter 和 getter 方法

  在写计算属性的时候,一定不能出现 self ,不然会出现死循环

  • 计算属性与存储属性

  · 存储属性就是 类 或 结构体 里 定义的变量(或常量)。存储属性可以是变量存储属性(用关键字 var定义),也可以是常量存储属性(用关键字let定义)。

  · 除存储属性外,类、结构体和枚举可以定义计算属性。计算属性不直接存储值,而是提供一个 getter 和一个可选 的 setter,来间接获取和设置其他属性或变量的值。

  • 声明类方法

  声明:代码 30 - 38行,访问:代码61 - 63行

  注意:类方法中只能使用 类属性,不能使用 对象属性

  两种方式:

   使用 class 修饰,它是一个类方法,可以被子类重写 

   使用 static 修饰,虽然是一个类方法,但是该方法在子类中不能进行重写

  • 声明实例(对象)方法

  声明:代码 40 - 43行,访问:代码65 - 66行

  相当于OC中的实例方法

  • 声明子类

  声明:代码 68 - 81行  

  和OC相似,单继承,可以遵循协议,两者同时存在时,先在:后面写父类,后写协议,用逗号隔开

  重写父类方法,使用 override 关键字

4. 值类型和引用值类型的区别

 值类型

  • 该类型的每个实例持有数据的副本,并且该副本对于每个实例来说是独一无二的一份,比如结构体(struct)、枚举(enum)、元组(tuple)都是值类型

  • 值传递只是单纯的将数据拷贝一份,赋值给一个同类型的变量,两个变量互不影响,一个值发生改变,另一个不会发生任何变化

 引用值类型

  • 该类型的实例共享数据唯一的一份副本(在native层面说的话,就是该类型的每个实例都指向内存中的同一个地址),比如类(class)就是引用类型。

  • 值传递是将一个变量的地址赋值给另一个变量,当一个值发生改变,两个值同时改变
struct animal { // 值类型  var name:String?  var age:Int?    init(name:String, age:Int) {    self.name = name    self.age = age  }}var dog = animal(name: "贝贝", age: 3)var dog1 = dog // 此时将dog的数据拷给dog1dog.name = "欢欢"print("dog.name:\(dog.name!), dog1.name:\(dog1.name!)")// 引用值类型class animal {  var name:String?  var age:Int?    init(name:String, age:Int) {    self.name = name    self.age = age  }}var dog = animal(name: "贝贝", age: 3)var dog1 = dog // 此时将dog的数据拷给dog1dog.name = "欢欢"print("dog.name:\(dog.name!), dog1.name:\(dog1.name!)")

  打印结果:

 

Swift之语法2(精简版)

 值类型与引用类型使用情形

  • 使用值类型的情形:       

  使用 == 运算符比较实例数据的时候。

  你想单独复制一份实例数据的时候。

  当在多线程环境下操作数据的时候。

  • 使用引用类型(比如class)的情形:

  当使用 === 运算符判断两个对象是否引用同一个对象实例的时候。

  当上下文需要创建一个共享的、可变的对象时。

5.协议

 1> 概述

  • 协议定义了一个蓝图,规定了用来实现某一特定工作或者功能所必需的方法和属性

  • 类,结构体或枚举类型都可以遵循协议,并提供具体实现来完成协议定义的方法和功能

  • 任意能够满足协议要求的类型被称为遵循(conform)这个协议

 2> 声明协议

  • @objc 修饰的协议,其中的方法可以声明成可选实现(使用optional修饰)
@objc protocol SayHelloDelegate {  optional func sayHello()}

  • 声明一个所有函数都必须实现的协议。
protocol DescriptionDelegate {  func description() -> String  static func aClassMethod() ->String//表示声明了一个类方法}

 3> 遵守协议

  类遵守协议,直接写在本类名后面的冒号的后面,使用 "," 号分隔

class ErShiXiong: NSObject,SayHelloDelegate, DescripationDelegate {// 必须实现的协议方法,就必须实现,否则会报错  func test() {    }// 可选协议方法,会报警告,可以添加 @objc, 或者继承NSObject  @objc func test1() {  }}

6.扩展(Extension)

 1> 概述

  extension + 类名(结构体名字)可以对一个类和结构体扩展方法,类似于 OC 的 Category 类目

  extension 可以多次对一个类进行扩展,也可以给一个类扩展协议方法

 2> 使用Extension给类扩充一个方法

extension ErShiXiong {  func eat() {    print("吃饭")  }}let er = ErShiXiong()er.eat()

 3> 给类扩展实现协议

//先声明一个协议MyProtocol@objc protocol MyProtocol {  optional func test()  //该法方法可选实现  func test()}extension ErShiXiong: MyProtocol {  func test() {       print("Hello")  }}

7.闭包

 1> 概述  

  • 闭包是自包含的函数代码块,可以在代码中被传递和使用。 Swift 中的闭包与 C 和 Objective-C 中的 代码块(block)以及其他一些编程语言中的 匿名函数 比较相似。

  • 闭包可以捕获和存储其所在上下文中任意常量和变量的引用。 这就是所谓的闭合并包裹着这些常量和变量,俗称闭包。。

 2> 语法形式

  {

   (参数)-> 返回值类型  in
       执行语句
  }

 3> 闭包的使用(五种方式)

// 声明var myBlock : ((num1:Int, num2:Int) ->Int)// 第一种使用方式myBlock = {  (num1:Int,num2:Int)->Int in // 切记不能忘记 in    return num1 > num2 ? num1 : num2}// 第二种使用方式myBlock = {  (num1,num2)->Int in // 切记不能忘记 in    return num1 > num2 ? num1 : num2}// 第三种使用方式(常用,见名知意)myBlock = {  num1, num2 in  return num1 > num2 ? num1 : num2}// 第四种使用方式myBlock = {  num1, num2 in num1 > num2 ? num1 : num2}// 第五种使用方式myBlock = {  $0 > $1 ? $0 : $1}let max = myBlock(num1: 88, num2: 69)print(max)

 4> 闭包传值(和OC中的Block传值类型)

  需求:创建一个工程,勾选swift语言,创建两个控制器给第一个控制器添加导航控制器,点击按钮push到第二个控制器,在第二个页面添加个按钮,点击返回第一个页面,并将第二页textField中输入的值传到第一页,并在第一页的textField中显示

  在第二页声明参数为String,无返回值的闭包变量,用于传值

class SecondViewController: UIViewController {  // 声明参数为String,无返回值的闭包变量  var block = {    (str: String) -> Void in  }...}

 

 

  在第二页的返回按钮的方法实现闭包

fun buttonAction (){  // 闭包调用  self.block!("block返回值")  self.navigationController?.popViewControllerAnimated(true)}

 

 

  在第一页的push按钮中实现闭包

 

fun pushAction (){    let secondVC: SecondViewController = SecondViewController()    secondVC.view.backgroundColor = UIColor.orangeColor()    // 闭包实现,拿到传回的值    secondVC.block = {      (str: String) -> Void in      self.textField?.text = str    }  self.navigationController?.pushViewController(secondVC, animated: true)

 

 

  注意:在class类中声明变量 最好立刻初始化 或 定义为可选变量,不然该类必须重写初始化方法




原标题:Swift之语法2(精简版)

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

肥东专线:https://www.goluckyvip.com/tag/97870.html
南通至山东物流专线:https://www.goluckyvip.com/tag/97871.html
南沙专线:https://www.goluckyvip.com/tag/97872.html
苍南专线:https://www.goluckyvip.com/tag/97873.html
东莞云南专线物流:https://www.goluckyvip.com/tag/97874.html
日照专线:https://www.goluckyvip.com/tag/97875.html
探讨内地人开设香港账户的可行性 :https://www.kjdsnews.com/a/1836442.html
在古巴做游轮 古巴旅游项目:https://www.vstour.cn/a/363194.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流