• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

swift属性

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

属性将值和类,结构,枚举相关联。属性分为计算属性和存储属性。存储属性存储常量或变量作为实例的一部分 ,计算属性计算一个值。存储属性用于类和结构体,计算属性用于类,结构体和枚举。

1:存储属性

存储属性是存储类或结构体的实例里的一个常量或变量。

struct Range{
    var length:Int
    let height:Int
}
var testRang = Range(length:1, height:2)
testRang.length = 3

2:常量和存储属性

如果将结构体的实例定义为一个常量,则不能修改实例的任何属性。

struct Range{
    var length:Int
    let height:Int
}
let testRang = Range(length:1, height:2)
//testRang.length = 3 error

其原因在于结构体(struct)是值类型,其实例被定义成常量后它结构体的所有属性都是常量类型。

但如果是class类类型,定义成常量后,实例的变量类型依然可以被修改。类是引用类型。

3:延迟存储属性。@lazy表示一个变量(只能是变量var)声明为延迟存储属性,这样在实例创建时候变量不会创建,只有引用到该变量时候才会创建

class BigConstructor{
    var strMsg = "big msg"
}

class CLazyVar{
    @lazy var lazyVar = BigConstructor()
    var strName = "tset"
}

import Foundation
var obj = CLazyVar();
obj.strName = "sx"//lazyVar还没被创建
println("\(obj.strName) \(obj.lazyVar)")//这时候才创建

4:属性和实例变量

swift语言没有使用变量来做存储,统一使用属性访问。

5: 计算属性。计算属性提供一个get/set来 获取/改变 其他属性的值

class CValue{
    var strName:String = "xx"
    var value:String{
    get{
        return strName
    }
    set(newStrName){
        strName += newStrName
    }
    }
}
import Foundation
var obj = CValue()
obj.value = " oid"
println("\(obj.strName)")

5.1 便捷set属性,可以使用默认的名字newValue写set属性而不用带括号

class CValue{
    var strName:String = "xx"
    var value:String{
    get{
        return strName
    }
    set{
        strName += newValue
    }
    }
}

5.2只读计算属性。可以只通过get而不用set返回一个只读计算属性。

class CValue{
    var strName:String = "xx"
    var value:String{
    get{
        return strName
    }
    }
}
import Foundation
var obj = CValue()

println("\(obj.strName)")

6:属性监视器。

可以为除了延迟存储属性之外的其他存储属性添加属性监视器,也可以通过重载属性的方式 ,为继承的属性(包括存储属性和计算属性)添加属性监视器 。计算属性因为有set实际上就是它的属性监视器了。使用willSet/didSet。

class CMonitor{
    var strName:String = ""
    {
      willSet(newStrName){
        println("willSet : \(newStrName)")
      }
    didSet(newStrName){
        println("didSet:\(strName)")
    }
    }
}
import Foundation
var monitor = CMonitor()
monitor.strName = "sc"

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift—CoreFoundation框架-备发布时间:2022-07-13
下一篇:
Swift5.4语言指南(十八)可选链接发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap