美文网首页
《Swift学习笔记》12 - 类和结构体的简单介绍

《Swift学习笔记》12 - 类和结构体的简单介绍

作者: ShIwEn9 | 来源:发表于2019-08-15 12:02 被阅读0次

介绍:Swift 语言由苹果公司在 2014 年推出,用来撰写 Mac OS 和 iOS 应用程序,并且Swift还是开源的,开源地址:https://github.com/apple/swift,同时附上官方博客地址:https://swift.org
目前Swift已经发展到了第五版本。显然苹果大有推翻 OC “江山”的意思.
今天就来初探一下Swift,看看究竟为何swift有这么大的能力。
参考内容:
Swift中文
YungFan老师

swift

一、结构体的简单介绍

  • 结构体是值类型:当它被指定到常量或者变量,或者被传递给函数时会被拷贝的类型( Swift 中所有的基本类型——整数,浮点数,布尔量,字符串,数组和字典——都是值类型,并且都以结构体的形式在后台实现。
  • 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合
  • 结构体既可以定义属性又可以定义方法
1. 结构体的定义
  • 定义语法: Swift中用 struct 关键字定义类
struct 结构体名称 {
    // 属性和方法
}
  • 举例
struct structName {
    var width = 0.0
    var height = 0.0
    func structFunc() {
        print("structFunc1")
    }
}
2. 结构体的初始化
//结构体的实例化对象
let someStructName = structName()
3. 结构体成员初始化器
// 结构体成员初始化器
var someStructName1 = structName(width: 10, height: 10)
4. 访问属性
//访问属性
print(someStructName, someStructName.width, someStructName.height)
someStructName.structFunc()
5. 修改变量属性
someStructName1.width = 12.0
someStructName1.height = 13.0
print(someStructName1, someStructName1.width, someStructName1.height)
6. 结构体和枚举是值类型

这意味着你所创建的任何结构体和枚举实例——和实例作为属性所包含的任意值类型——在代码传递中总是被拷贝的。
再次声明: Swift 中所有的基本类型——整数,浮点数,布尔量,字符串,数组和字典——都是值类型,并且都以结构体的形式在后台实现。

  • 例如
    这里我们声明了变量 hd 将实例化对象 someStructName1 赋值给 hd ,现在我们更改 hd的属性 width ,但是 someStructName1.width 的值并没有改变,这说明现在 hd 和 someStructName1 完全是两个不同的实例
// 关于值类型
var hd = someStructName1
hd.width = 11.0
someStructName1.width // print: 10

枚举也相同。

二、类的简单介绍

  • 类是引用类型:不同于值类型,在引用类型被赋值到一个常量,变量或者本身被传递到一个函数的时候它是不会被拷贝的。相对于拷贝,这里使用的是同一个对现存实例的引用

1. 类的声明
Swift中用 class 关键字定义类

class 类的名称 {
    // 属性和方法
}

// 举例 
class className{
    var name = "annwn"
    var age = 23
    var sex = "男"
    func say() -> () {
        print("求职中...")
    }
}

2. 类的实例化

var annwnClass = className()

3. 访问类的属性和方法
直接可以通过点语法实现

annwnClass.name = "shiwen9"
annwnClass.age = 22
annwnClass.say()

3. 类是引用类型

下面我们 annwnClass 赋值给 annwnclass2 当我们改变 annwnclass2的属性值name会发现 annwnClass .name的值也改变了。

// 类是引用类型
var annwnclass2 = annwnClass

annwnclass2.name = "best 稳"

print(annwnClass.name)

4. 特征运算符
因为类是引用类型,有可能有很多常量和变量都是引用到了同一个类的实例。有时候找出两个常量或者变量是否引用自同一个类实例非常有用。
Swift提供了两个特点运算符:

  • 相同于 ( ===)
  • 不相同于( !==)
if annwnClass === annwnclass2 {
    print("相同于")
}


if annwnClass !== annwnclass2 {
    print("不相同于")
}
  • 注意:
    • “相同于”意味着两个类类型常量或者变量引用自相同的实例;
    • “等于”意味着两个实例的在值上被视作“相等”或者“等价”,某种意义上的“相等”,就如同类设计者定义的那样。
三、类和结构体的异同和如何选择

1. 类和结构体的异同

  • 在 Swift 中类和结构体有很多共同之处,它们都能:

    • 定义属性用来存储值;
    • 定义方法用于提供功能;
    • 定义下标脚本用来允许使用下标语法访问值;
    • 定义初始化器用于初始化状态;
    • 可以被扩展来默认所没有的功能;
    • 遵循协议来针对特定类型提供标准功能。
  • 类有而结构体没有的额外功能:

    • 继承允许一个类继承另一个类的特征;
    • 类型转换允许你在运行检查和解释一个类实例的类型;
    • 反初始化器允许一个类实例释放任何其所被分配的资源;
    • 引用计数允许不止一个对类实例的引用。

注意:结构体在你的代码中通过复制来传递,并且并不会使用引用计数。

2. 类和结构体之间的选择

  • 类和结构体都可以用来定义自定义的数据类型,作为你的程序代码构建块。

  • 结构体实例总是通过值来传递,而类实例总是通过引用来传递。

  • 符合创建结构体的情况:

    • 几何形状的大小,可能封装了一个 width属性和 height属性,两者都为 double类型;
    • 一定范围的路径,可能封装了一个 start属性和 length属性,两者为 Int类型;
    • 三维坐标系的一个点,可能封装了 x , y 和 z属性,他们都是 double类型。

类和结构体的介绍就到这里了。有什么不足的地方欢迎补充。文章大多数内容来自:

Swift中文
YungFan老师
再次感谢!

求职广告:本人实习生,现在急需一份工作,杭州南京合肥的都可以。对我感兴趣的可以私聊我 0.0。谢谢~~~

相关文章

网友评论

      本文标题:《Swift学习笔记》12 - 类和结构体的简单介绍

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