美文网首页
swift-结构体和类

swift-结构体和类

作者: GitArtOS | 来源:发表于2021-04-09 14:57 被阅读0次

1.结构体和类的对比

  1. 定义属性用于存储值
  2. 定义方法用于提供功能
  3. 定义下标操作用于通过下标语法访问它们的值
  4. 定义构造器用于设置初始值
  5. 通过扩展以增加默认实现之外的功能
  6. 遵循协议以提供某种标准的功能

2.与结构体相比,类有的附加功能

  1. 继承:允许一个类继承于另一个类的特征
  2. 类型转换允许在运行时检查和解释一个类实例的类型
  3. 析构器允许一个类实例释放任何其所分配的资源
  4. 引用计数允许对一个类的多次引用

类支持的附加功能是以增加复杂性为代价的。作为一般原则,优先使用结构体,因为它们更容易理解,仅在适当或者必要时才使用类

实际上:你的大多数自定义数据类型都会是结构体枚举

//类与结构体
 */

struct SomeStructure {
    
    
    
}

class PJSomeClass {
    
    
}

struct PJResolution {
    var width  = 0
    var height = 0
}

class PJVideoMode {
    
    var resolution = PJResolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

let someRe = PJResolution()
let someVideoMode = PJVideoMode()


someVideoMode.resolution.width = 10
someVideoMode.resolution.height = 20



print("someRe is \(someVideoMode.resolution.width) ,op = \(someVideoMode.interlaced) ppp = \(String(describing: someVideoMode.name))")

//结构体和类都使用构造器语法来创建新的实例。构造器语法的最简形式是在结构体或者类的类型名字后跟着一个空括号


//结构体类型的成员逐一构造器
//所有的结构体都一个自动生成的成员逐一构造器,用于初始化新结构体中成员的属性。
//类实例没有默认的成员逐一构造器
let vga = PJResolution(width: 23, height: 98)

//结构体和枚举是值类型
//标准库定义的集合,例如:数组、字典、字符串,都对复制进行了优化以降低性能成本。新集合不会被立即复制,而是跟原集合共享同一份内存
//共享同样的元素,在集合的某个副本要被修改前,下回复制它的元素

let hfgg = PJResolution(width: 1920, height: 1080)
var cinme = hfgg

cinme.width = 20000

print(cinme)


enum CompassPoint {
    
    case north , south , east ,west
    mutating func turnNorth(){
        self = .north
    }
    
}

var currentDirection = CompassPoint.west

let rememberDirection = currentDirection

currentDirection.turnNorth()

print(currentDirection) // morth
print(rememberDirection) //west

//类是引用类型
//与值类型不同,引用类型再被赋予到一个变量、常量或者被传递到一个函数时,其值不会被拷贝,使用的是实例的引用,而不是其拷贝
 
let tenenrt = PJVideoMode()
tenenrt.resolution = hfgg
tenenrt.interlaced = true
tenenrt.name = "1080i"
tenenrt.frameRate = 34.5

print(tenenrt)

let alseTen = tenenrt
alseTen.frameRate = 30.0

print(alseTen)

//恒等运算符
//类是引用类型,所以多个长量和变量可能在幕后同时引用同一个类实例
//用来检测两个变量或者常量是不是引用的同一类实例

if tenenrt === alseTen {
    print("tenenrt and alseTen refer to the same Mode instance")
}

//=== 相同 表示两个类类型(class type)的常量或者变量引用同一个类实例
//== “等于”表示两个实例的值“相等”或“等价”

相关文章

  • 跟着洲洲哥一块学习Swift-属性

    本文首发地址 Swift-属性 首先结构体和枚举都是值类型,类是引用类型。 把结构体赋值给一个变量 * 把结构体...

  • Swift-类和结构体

    类和结构体对比 Swift 中类和结构体有很多共同点。共同处在于: 定义属性用于存储值 定义方法用于提供功能 定义...

  • Swift-类和结构体

    类和结构体是通用的,灵活的结构,成为程序代码的基础。 您可以通过使用与常量,变量和函数完全相同的语法来定义属性和方...

  • swift-类和结构体

    结构体和类 swift 中储存结构化的数据 可以用 结构体,枚举,类及使用闭包捕获变量。 类和结构体不同点: 1....

  • swift-结构体和类

    1.结构体和类的对比 定义属性用于存储值 定义方法用于提供功能 定义下标操作用于通过下标语法访问它们的值 定义构造...

  • Swift-结构体和类

    结构体 在swift 标准库中,绝大多数的公开类型都是结构体,而枚举和类只占很小一部分 比如Bool、int、do...

  • swift-类属性

    了解属性之前,需要先了解前面的swift-类结构内容 - swift-类结构源码探寻[https://www.ji...

  • Swift-类与结构体

    一、类与结构体的比较 相同点: 定义属性:存值 定义方法 下标语法定义和使用 定义初始化器 使用extension...

  • 类和结构体

    类与结构体 本节内容包括: 类和结构体对比 结构体和枚举是值类型 类是引用类型 类和结构体的选择 集合类型的赋值与...

  • Swift Tour Learn (六) -- Swift 语法

    Swift语法基础(五)-- (类和结构体、属性、方法) 本章将会介绍 类和结构体对比结构体和枚举是值类型类是引用...

网友评论

      本文标题:swift-结构体和类

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