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 ...
随机推荐
- A memory leak issue with WPF Command Binding
Background In our application, we have a screen which hosts several tabs. In each tab, it contains a ...
- 使用SignalR为FineUI/Webform打造消息总线
第一次写博客,语言组织能力不好,请大家多多包涵! 效果图如下: 图片的右下角即为SignalR消息总线的消息框. 一.建立SignalR服务端 第一步:打开一个空的FineUI 4.5空项目文件,在空 ...
- C/C++文件操作2
一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef struct { int level; /* fill/empty level of ...
- js时间函数
时间 new Date() 获取时间,可以理解为是系统默认的函数. 从小括号里面获取系统时间日期,相当于在调用系统默认的函数. 年 getFullYear() 注意,有Full. 月 getMonth ...
- JSP取得绝对路径
在JavaWeb开发中,常使用绝对路径的方式来引入JavaScript和CSS文件,这样可以避免因为目录变动导致引入文件找不到的情况,常用的做法如下: 一.使用${pageContext.reques ...
- Maven学习总结(一)——Maven入门——转载
一.Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1.1. ...
- Leetcode 198 House Robber 动态规划
题意是强盗能隔个马抢马,看如何获得的价值最高 动态规划题需要考虑状态,阶段,还有状态转移,这个可以参考<动态规划经典教程>,网上有的下的,里面有大量的经典题目讲解 dp[i]表示到第i匹马 ...
- Java和.net常用开发框架组合
Java: SSH和SSM 1.SSH是Spring(控制)+Struts(展现)+Hibernate(ORM)的缩写:此组合更严谨,适合企业级行业开发等等.2.SSM是Spring(控制)+Spri ...
- (转)阴影锥(Shadow Volume)
转自:http://blog.csdn.net/zjull/article/details/11819923 Shadow Map和Shadow Volume是当今比较流行的实时阴影渲染方法,跟Sha ...
- mysql 查看正在运行的进程
show processlist ; 显示正在运行的进程,使用Kill命令删除 kill 5260;