Swift 4语言为类,枚举或结构提供属性以关联值。
存储属性
Swift 4引入了存储属性的概念来存储常量和变量的,常量的存储属性由'let'关键字定义,变量的存储属性由'var'关键字定义。
- 在定义期间, 存储的属性提供"默认值"
- 初始化期间,用户可以初始化和修改初始值
struct Number { var digits: Int let pi=3.1415 } var n=Number(digits: 12345) n.digits=67 print("\(n.digits)") print("\(n.pi)")
运行上述程序时,我们得到以下输出-
67 3.1415
考虑以上代码中的以下行-
let pi=3.1415
在此,pi=3.1415将变量pi初始化为存储的属性值。
下面的示例通过let来定义不可改变的存储属性。
struct Number { var digits: Int let numbers=3.1415 } var n=Number(digits: 12345) n.digits=67 print("\(n.digits)") print("\(n.numbers)") n.numbers=8.7
运行上述程序时,我们得到以下输出-
error: cannot assign to 'numbers' in 'n' n.numbers=8.7
而不是将"numbers"重新初始化为8.7,而是返回一条错误消息,指出"numbers"被声明为常量。
惰性存储属性
Swift 4提供了一个名为“惰性存储属性"的属性,该属性在首次初始化变量时不会计算初始值。'lazy'修饰符用于变量声明之前,以使其惰性存储属性。
class sample { lazy var no=number() //`var` 声明是必需的。 } class number { var name="Swift 4" } var firstsample=sample() print(firstsample.no.name)
运行上述程序时,我们得到以下输出-
Swift 4
计算属性
与存储值无关,计算的属性提供了一个getter和一个可选的setter,以间接检索和设置其他属性和值。
class sample { var no1=0.0, no2=0.0 var length=300.0, breadth=150.0 var middle: (Double, Double) { get { return (length/2, breadth/2) } set(axis){ no1=axis.0 - (length/2) no2=axis.1 - (breadth/2) } } } var result=sample() print(result.middle) result.middle=(0.0, 10.0) print(result.no1) print(result.no2)
运行上述程序时,我们得到以下输出-
(150.0, 75.0) -150.0 -65.0
当计算的属性未定义新值时,将为该特定变量设置默认值。
只读属性
计算属性中的只读属性定义为具有getter但不包含setter的属性,它始终用于返回值。通过“."进一步访问变量。
class film { var head="" var duration=0.0 var metaInfo: [String:String] { return [ "head": self.head, "duration":"\(self.duration)" ] } } var movie=film() movie.head="Swift 4 Properties" movie.duration=3.09 print(movie.metaInfo["head"]!) print(movie.metaInfo["duration"]!)
运行上述程序时,我们得到以下输出-
Swift 4 Properties 3.09
属性观察器
在Swift 4中,观察和响应属性值使用了属性观察器,每次设置属性值时,都会调用属性观察器,除了惰性存储的属性,我们还可以通过"overriding"方法将属性观察器添加到"inherited"属性中。
class Samplepgm { var counter: Int=0 { willSet(newTotal){ print("Total Counter is:\(newTotal)") } didSet { if counter > oldValue { print("Newly Added Counter\(counter - oldValue)") } } } } let NewCounter=Samplepgm() NewCounter.counter=100 NewCounter.counter=800
运行上述程序时,我们得到以下输出-
Total Counter is: 100 Newly Added Counter 100 Total Counter is: 800 Newly Added Counter 700
类型属性
在类型定义部分使用大括号{}定义属性,并且变量的范围也已在前面定义。为了为值类型定义类型属性,使用" static"关键字,对于类类型使用" class"关键字。
struct Structname { static var storedTypeProperty=" " static var computedTypeProperty: Int { //return an Int value here } } enum Enumname { static var storedTypeProperty=" " static var computedTypeProperty: Int { //return an Int value here } } class Classname { class var computedTypeProperty: Int { //return an Int value here } }
查询和设置属性
就像实例属性一样,查询类型属性并设置为“."。语法仅针对类型,而不是指向实例。
struct StudMarks { static let markCount=97 static var totalCount=0 var InternalMarks: Int=0 { didSet { if InternalMarks > StudMarks.markCount { InternalMarks=StudMarks.markCount } if InternalMarks > StudMarks.totalCount { StudMarks.totalCount=InternalMarks } } } } var stud1Mark1=StudMarks() var stud1Mark2=StudMarks() stud1Mark1.InternalMarks=98 print(stud1Mark1.InternalMarks) stud1Mark2.InternalMarks=87 print(stud1Mark2.InternalMarks)
运行上述程序时,我们得到以下输出-
97 87
参考链接
https://www.learnfk.com/swift/swift-properties.html
标签:存储,Int,无涯,print,var,InternalMarks,Swift,Properties,属性 From: https://blog.51cto.com/u_14033984/9463509