9、【Swift】类和结构体

2020-12-16  本文已影响0人  Sunday_David

一个的实例通常被称为对象。

结构体和类对比

类型定义的语法

struct SomeStructure {
    // 在这里定义结构体
}
class SomeClass {
    // 在这里定义类
}

定义了一个新的类或者结构体:用UpperCamelCase 命名法命名 (比如这里我们说到的 SomeClass和 SomeStructure)以符合 Swift 的字母大写风格(比如说 String , Int 以及 Bool)

属性和方法使用lowerCamelCase命名法[1] (比如 frameRate 和 incrementCount),以此来区别于类型名称

CamelCase names :在给储存器或者函数命名时我们习惯上把多个有意义的单词以开头大写的形式拼接在一起组成一个单一的长单词。这种方法被称为“驼峰式命名法”,又分为开头大写和开头小写两种。比如说 SomeClass 、 frameRate 等。

struct Resolution {
    var width = 0
    var height = 0
  // 两个属性被初始化为整数 0 的时候,它们会被推断为 Int 类型
}
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
  //  name 是一个可选类型,它会被自动赋予一个默认值 nil,意为“没有 name 值”
}

结构体和类的实例

let someResolution = Resolution()
let someVideoMode = VideoMode()

属性访问

print("The width of someResolution is \(someResolution.width)")
// 打印 "The width of someResolution is 0"
print("The width of someVideoMode is \(someVideoMode.resolution.width)")
// 打印 "The width of someVideoMode is 0"
someVideoMode.resolution.width = 1280
print("The width of someVideoMode is now \(someVideoMode.resolution.width)")
// 打印 "The width of someVideoMode is now 1280"

结构体类型的成员 初始化器 / 构造器

let vga = Resolution(width: 640, height: 480)

结构体和枚举是值类型

  • Copy On Write技术
    • Swift对系统自带的集合类型,进行了优化,新集合不会立即复制,跟原集合共享同一份内存。

    • 只有集合的副本要被修改时,才会复制原集合的元素

let hd = Resolution(width: 1920, height: 1080)
var cinema = hd
cinema.width = 2048
print("cinema is now  \(cinema.width) pixels wide")
// 打印 "cinema is now 2048 pixels wide"
print("hd is still \(hd.width) pixels wide")
// 打印 "hd is still 1920 pixels wide"
img

类是引用类型

let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
img

恒等运算符

if tenEighty === alsoTenEighty {
    print("tenEighty and alsoTenEighty refer to the same VideoMode instance.")
}
// 打印 "tenEighty and alsoTenEighty refer to the same VideoMode instance."

指针

类和结构体之间的选择

字符串,数组和字典的赋值与拷贝行为

上一篇下一篇

猜你喜欢

热点阅读