swift 属性
属性将值和类,结构,枚举相关联。属性分为计算属性和存储属性。存储属性存储常量或变量作为实例的一部分 ,计算属性计算一个值。存储属性用于类和结构体,计算属性用于类,结构体和枚举。
1:存储属性
存储属性是存储类或结构体的实例里的一个常量或变量。
struct Range{
var length:Int
let height:Int
}
var testRang = Range(length:, height:)
testRang.length =
2:常量和存储属性
如果将结构体的实例定义为一个常量,则不能修改实例的任何属性。
struct Range{
var length:Int
let height:Int
}
let testRang = Range(length:, height:)
//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"
swift 属性的更多相关文章
- Swift属性
属性的存储 属性的主要作用是存储数据,可以常量属性和变量属 性: struct FixedLengthRange { var firstValue: Int let length: Int } var ...
- Swift—属性观察者-备
为了监听属性的变化,Swift提供了属性观察者.属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到. 属性观察者主要有以下两个: willSet:观察者在修改之前调用. didSe ...
- swift 属性和方法
属性和常量 如果创建了一个结构体的实例并赋值给一个常量,则无法修改实例的任何属性: let rangeOfFourItems = FixedLengthRange(firstValue: 0, len ...
- 学习swift从青铜到王者之swift属性09
1.结构体常量和类常量的存储属性 let p1 = Person1() //p1.age = 88 不允许修改 //p11.name = "yhx1" 不允许修改 var p11 ...
- swift属性观察者机智
为了让程序能在属性被赋值时获得执行代码的机会.swift提供了属性观察者机智,属性观察者其实就两个特殊的回调方法 willSet:被观察的属性即将被赋值之前自动调用该方法 didSet:被观察的属性被 ...
- Swift - 属性观察者(willSet与didSet)
属性观察者,类似于触发器.用来监视属性的除初始化之外的属性值变化,当属性值发生改变时可以对此作出响应.有如下特点: 1,不仅可以在属性值改变后触发didSet,也可以在属性值改变前触发willSet. ...
- Swift 属性 函数
如今看cocoachina上得文章越来越有质量了,果断分享一下 原文: http://www.cocoachina.com/newbie/basic/2014/0611/8773.html 函数 函 ...
- swift 属性值变化
如果创建了一个结构体的实例并将其赋值给一个常量,则无法修改该实例的任何属性,即使有属性被声明为变量也不行. 这种行为是由于结构体(struct)属于值类型.当值类型的实例被声明为常量的时候,它的所有属 ...
- Swift学习笔记 - Swift属性只读
在OC中我们经常用到只读属性,用readonly修饰一下就行了,但在Swift中已经不是这样修饰的了,下面记录一下Swift中只读属性的使用 在OC中的只读: //只读属性 @property(rea ...
随机推荐
- Android相关sdk使用
SimpleDateFormat使用详解 Android_AlertDialog 两分钟彻底让你明白Android Activity生命周期(图文)! Android布局控件之LinearLayo ...
- Linux:文件权限
使用较长格式列出文件:ls -l显示除了 '.'(当前目录),'..' 上一级目录之外的所有包含隐藏文件(Linux 下以 '.' 开头的文件为隐藏文件): ls -Al查看某一个目录的完整属性,而不 ...
- ASP.NET 5系列教程 (三):view components介绍
在ASP.NET MVC 6中,view components (VCs) 功能类似于虚拟视图,但是功能更加强大. VCs兼顾了视图和控制器的优点,你可以把VCs 看作一个Mini 控制器.它负责控制 ...
- LINQ-to-SQL那点事~利用反射在LINQ-to-SQL环境中实现Ado.net的CURD操作
回到目录 对于linq to sql提供的CURD操作,给我们的感觉就是简单,容易使用,更加面向对象,不用拼SQL语句了,这些好处都表示在处理单条实体或者集合长度小的情况下,如果有一个1000条的集合 ...
- bigautocomplete实现联想输入,自动补全
bigautocomplete是一款Jquery插件.用它实现仿搜索引擎文本框自动补全插件功能很实用,使用也很简单,引入了插件之后写几行代码就可以实现,可以灵活设置. 先看效果图: 上图是通过ajax ...
- atitit.dw不能显示正确的百分比高度in dw的解决
atitit.dw不能显示正确的百分比高度in dw的解决 div 设置35%的高度,三,不能正确的显示高度...环境dw cs6 但是设置161px奏能ok了...表明这个是dw的一个bug... ...
- paip.一千 常用汉字 高频汉字 覆盖率90%
paip.一千 常用汉字 高频汉字 覆盖率90% 一千个使用频率最高的汉字,其覆盖率达一般书刊用字的90%. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:a ...
- iOS开发之静态库(二)—— .a
前面已经介绍了iOS中静态库的基本概念和特点,这里就不再多废话,直接上代码 编译环境Xcode5.1 + Mac OS X 10.9.3 新建静态库项目 Xcode中创建静态库的模板有两个,一个是创建 ...
- Javascript设置广告和时间表和数组的学习
<html> <head> <meta charset="utf-8"> <title></title> </he ...
- 如何使用代码动态的获取和设置ImageView的宽度和高度?
http://blog.csdn.net/wulianghuan/article/details/8644144 国内某金融企业的一道面试题:如何在代码中获得一个ImageVIew的高度和宽度? 相信 ...