美文网首页
12-Swift 结构体

12-Swift 结构体

作者: magic_pill | 来源:发表于2017-02-22 23:02 被阅读20次

一、结构体的介绍:

  • 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合;
  • 结构体(struct)指的是一种数据结构;
  • 结构体是值类型,在方法中传值时是值传递。

二、结构的定义格式:

struct 结构体名称{
    //属性和方法
}
struct 结构体名称{
    //属性和方法
    var name:String  //name:非可选,永远不能为nil
    var age:Int
}
//结构体的创建,会自动生成一个“逐一构造器”
//目的:保证给结构体里面所有的非可选属性赋值,保证肯定有值
let tt = 结构体名称(name: "yijiang",age:12)
tt.name     //yijiang
struct Person{
    var name: String?
    var age: Int?
}
let p1 = Person()
let p2 = Person(name: "sansan", age: nil)
p.age     //nil
struct Person{
    var name: String
    var age: Int?
}
let p = Person(name: "sansan", age: nil)
p.age     //nil
//创建p时不能把age省略,除非重写其构造函数

三、应用场景:

  • 案例:计算两点之间的距离:
struct Point{
    var x:Float
    var y:Float
}
func getDistance(第一个点 p1:Point,第二个点 p2:Point) -> Float{
    return sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2))
}
let point1 = Point(x: 1, y: 2)
let point2 = Point(x: 4, y: 6)
getDistance(第一个点: point1, 第二个点: point2)   //5
  • 函数实现方案:
  • 改进:定义结构体

四、结构体扩充构造函数:

  • 默认情况下,结构体会自动创建一个“逐一构造器”;
  • 扩充构造函数:为了让我们在使用结构体时更加的灵活,Swift还可以对构造函数进行扩充;
  • 扩充的注意点:
  • 创建构造函数,不需要func关键字;
  • 在扩充的构造函数中,必须保证非可选成员变量是有值的;
  • 扩充的构造函数会覆盖原有的构造函数
struct Student{
      var name:String
      var age:Int?

      //构造函数是系统生成的函数,不需要加 func 关键字
      //如果自己扩充构造函数,会覆盖之前自动生成的逐一构造器
      //构造函数中必须保证所有的非可选属性有值
      init() {
        name = "yijiang"
      }

      init(name:String) {
        self.name = name
      }

      init(name:String,age:Int) {
        self.name = name
        self.age = age
      }
}
let s1 = Student()
s1.name  //yijiang
let s2 = Student(name: "jiang")
s2.age  //nil
s2.name     //jiang
let s3 = Student(name: "YijiangWang", age: 18)
s3.name     //YijiangWang
s3.age      //18

五、结构体扩充函数:

  • 为了让结构体使用更加灵活,Swift的结构体中可以扩充方法;
//结构体扩充函数
struct Location{
    var x:Double
    var y:Double

    //结构体是一个值传递
    //默认情况下,是不能改变实例的属性值,如果想要改变,必须要添加mutating关键字,让self实例可以改变里面的值
    mutating func moveX(x:Double) {
        self.x += x
    }
}
var l1 = Location(x: 10, y: 10);
l1.moveX(x: 12)
l1.x    //22
//用extension关键字扩充自定义结构体方法
extension Location{
    mutating func moveY(y:Double) {
        self.y += y
    }
}
var l2 = Location(x: 5, y: 6)
l2.moveY(y: 3)
l2.y    //9
  • 扩充系统的结构体方法:
  • 如果我们的结构体不是自己定义的,我们也可以扩充里面的方法,这个机制,叫做extension:
extension String{
      func run() -> String{
        return self + ",天天向上"
      }
}
let str:String = "我要好好学习"
str.run()   //"我要好好学习,天天向上"

相关文章

  • 12-Swift 结构体

    一、结构体的介绍: 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合; 结构体(stru...

  • 结构体

    [toc] 结构体的定义方式 先定义结构体类型,再定义结构体变量 定义结构体类型的同时定义结构体变量 定义结构体类...

  • 【C语言笔记】<十九>结构体

    结构体的基本概念 结构体初始化 结构体的内存存储细节 结构体定义的方式 结构体类型的作用域 指向结构体的指针 结构...

  • C结构体和链表

    一,结构体变量定义及初始化 二,无名结构体 备注:无名结构体很少使用 三,宏定义结构体 四,结构体嵌套 五,结构体...

  • 结构体

    结构体定义* 结构体中的格式:* struch 结构体名* {* 结构体成员变量* }* 结构体中的特点* 1.结...

  • 结构体数组的定义

    结构体数组的定义 1、先定义结构体类型,再定义结构体数组 2、定义结构体类型的同时定义结构体数组 3、省略结构体类...

  • C#结构体,析构方法,跨程序访问

    结构体 结构体定义 结构体的语法格式: struct + 结构体名 { 结构体成员变量(相当于类中的字段) } 结...

  • 结构体

    结构体有名定义 无名定义 结构体嵌套定义 结构体内存对齐 结构体成员初始化 结构体变量引用 结构体的有名定义:直白...

  • 菜鸡学Swift3.0 13.结构体

    结构体 struct 是值类型 1.定义结构体 struct 结构体类型 { var 结构体属性:类型 ...} ...

  • 结构体

    结构体初识 结构体指针 结构体的匿名字段 结构体嵌套 Go语言中的OOP

网友评论

      本文标题:12-Swift 结构体

      本文链接:https://www.haomeiwen.com/subject/uakvwttx.html