Swift属性

简介: <div><p><span style="font-size:14px;">属性的存储</span></p><p><span style="font-size:14px;"> </span></p><p><span style="font-size:14px;">属性的主要作用是存储数据,可以常量属性和变量属 性;</span></p><p><span style="font-size

属性的存储

 

属性的主要作用是存储数据,可以常量属性和变量属 性;

struct FixedLengthRange {
var firstValue: Int let length: Int
}
var rangeOfThreeItems =FixedLengthRange(firstValue: 0,
length: 3) 
// the range represents integer values 0, 1, and2 rangeOfThreeItems.firstValue = 6
// the range now represents integer values 6, 7, and 8

但是 rangeOfFourItems 实例为常量属性也是不可以修改的。

l

et rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)
// this range represents integer values 0, 1, 2, and 3 rangeOfFourItems.firstValue = 6

延时存储属性

延时存储属性是初始化时候不分配值,直到第一次使 用它。

属性@lazy 声明。

class DataImporter {
/*
DataImporter is a class to import data from anexternalfile.
The   class  is assumed     to  take  a  non-trivial amount of time toinitialize.
*/
var fileName = "data.txt"
// the  DataImporter   class  would   provide  dataimporting functionality here
}
class DataManager {
@lazy varimporter= DataImporter()
var data = ""
// the DataManager class would provide data management functionality here
}
let manager= DataManager() manager.data += "Some data" manager.data += "Some more data"
println(manager.importer.fileName)

计算属性

有的时候一些属性是通过其他的属性计算得出的,通 过 get 和 set 访问器对其访问。

//定义 Point struct Point {
var x =0.0, y = 0.0
}
//定义 Size struct Size {
var width = 0.0, height = 0.0
}
//定义 Rect struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x+ (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2) 
}
}
}
var square =Rect(origin: Point(x: 0.0, y: 0.0), size: Size(width: 10.0,height: 10.0))
let initialSquareCenter =square.center square.center = Point(x: 15.0, y: 15.0) println("square.origin is  now    at  (\(square.origin.x),
\(square.origin.y))")
 

 

属性观察者

 

为了监听属性的变化,swift 通过了属性观察者。

 

• willSet 观察者是在存储之前调用。

• didSet 新值存储后调用。

 

class StepCounter {
var totalSteps: Int = 0{
willSet(newTotalSteps) {
println("About    to    set    totalSteps    to
\(newTotalSteps)")
}
didSet {
if totalSteps >oldValue   {
steps")
}
println("Added   \(totalSteps  - oldValue)
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// About to set totalStepsto 200
// Added200steps stepCounter.totalSteps = 360
// About to set totalStepsto 360
// Added160steps stepCounter.totalSteps = 896
// About to set totalStepsto 896
// Added536steps

静态属性

 

静态属性在结构体中使用 static 定义,类中使用 class

定义。

struct SomeStructure {
static var storedTypeProperty = "Some value."static var computedTypeProperty: Int{
// return anInt value here 
}
}
class SomeClass {
class varcomputedTypeProperty: Int {
// return anInt value here
}
}

调用的时候可以直接使用类和结构体名调用。 实例:

 

struct AudioChannel {
static letthresholdLevel= 10
static var maxInputLevelForAllChannels= 0 var currentLevel:Int = 0 {
didSet {
if               currentLevel                 > AudioChannel.thresholdLevel {
// cap   the  new   audio   level  to  the threshold level
currentLevel                             = AudioChannel.thresholdLevel
if               currentLevel                 > AudioChannel.maxInputLevelForAllChannels {
// storethis as the new overall maximum input level
AudioChannel.maxInputLevelForAllChannels          =
currentLevel
}
}
}
}
var leftChannel =AudioChannel()
var rightChannel =AudioChannel()
leftChannel.currentLevel = 7println(leftChannel.currentLevel)
// prints "7"
println(AudioChannel.maxInputLevelForAllChannels)


Swift交流讨论论坛论坛:http://www.cocoagame.net

欢迎加入Swift技术交流群:362298485



目录
相关文章
|
6月前
|
存储 监控 Swift
Swift 属性
10月更文挑战第29天
66 2
|
11月前
|
存储 Swift
Swift开发——属性检查器
Swift中的属性检查器(willSet, didSet)允许在设置存储属性值前后执行代码。在类`Circle`中,属性`radius`使用属性观察器:willSet在赋值前检查值,若值为负则打印警告;didSet在赋值后比较新旧值,根据变化输出相应信息。在实例`c`中,`radius`从-5变为0时,输出“Input value is negative.”和“The circle gets smaller.”;从0变为10时,输出“Input value is normal.”和“The circle gets larger.”。
258 4
Swift开发——属性检查器
|
11月前
|
存储 程序员 Swift
Swift开发——存储属性与计算属性
Swift推荐使用结构体进行开发,结构体支持属性和方法,且作为值类型。结构体属性包括存储属性(如radius)和计算属性(如r),计算属性不存储值,类似方法。结构体用`struct`定义,命名遵循大驼峰规则。实例名遵循小驼峰规则。属性可在结构体中任意位置定义,静态属性用`static`。存储属性可为`lazy`实现懒加载。结构体实例通过`.`访问属性和方法,静态属性和方法用`结构体名.`访问。计算属性可读写,可通过`get`和`set`定义。程序段1展示了结构体Point和Circle的属性和方法,包括私有属性、只读计算属性、可读写计算属性及`mutating`方法。
77 0
Swift开发——存储属性与计算属性
|
安全 Swift iOS开发
【Swift开发专栏】Swift中的属性观察者与KVO
【4月更文挑战第30天】Swift编程语言支持属性观察者(`willSet`和`didSet`)和键值观察(KVO)来响应属性变化。属性观察者在设置前(`willSet`)和设置后(`didSet`)执行代码,可用于数据绑定。KVO是Cocoa/Cocoa Touch中的机制,需`NSObject`子类和`@objc dynamic`属性配合使用。注意在观察者销毁前移除观察,以避免内存问题。示例展示了属性观察者实现简单数据绑定。
182 1
|
存储 算法 安全
【Swift专题】聊聊Swift中的属性
属性是面向对象语言中非常基础的语法特性,我们讲属性,实际上就是讲与类本身或类实例关联的数据。在面向对象的语言中,类作为重要的数据结构会封装数据与函数,类中的函数我们通常称其为方法,而数据则就是属性。
125 1
|
存储 Swift
Swift属性包装器@propertyWrapper
Swift属性包装器@propertyWrapper
194 0
|
存储 监控 Swift
Swift实用小册09:存储属性、计算属性及属性观察器的使用
Swift实用小册09:存储属性、计算属性及属性观察器的使用
309 0
Swift实用小册09:存储属性、计算属性及属性观察器的使用
|
存储 编译器 Swift
Swift5.0 - day4-闭包、属性、方法、下标
Swift5.0 - day4-闭包、属性、方法、下标
362 0
Swift5.0 - day4-闭包、属性、方法、下标
|
存储 Swift iOS开发
Swift5.1—类型属性
Swift5.1—类型属性
159 0
Swift5.1—类型属性
|
存储
Swift5.1——计算属性
Swift5.1——计算属性
171 0
Swift5.1——计算属性

热门文章

最新文章

相关课程

更多