学习来自《极客学院》

1、存储属性:存储在类、结构体里的变量或者常量

2、分为:实例存储属性、类型存储属性

3、所有的存储属性必须显示的指定初始值,在定义时或者构造器当中指定

4、可选类型的存储属性可以不指定初始值

 import Foundation

 struct lengthRang {
var start:Int
//定义常量存储属性,可以不指定初始值
let length:Int
}
//创建结构体的实例变量
var len = lengthRang(start: , length: )
println("len的起点为\(len.start),长度为\(len.length)") //延迟存储属性:第一次被调用时候才会被计算初始值的属性,用lazy修饰符
//当某个实例是一个创建成本比较大的实例的引用的时候,使用延迟存储可以提高程序的性能
//延迟存储属性只能被定义成变量,也就是var关键字创建,所以不能用let创建 //计算属性:就是set和get方法的组合
/*语法格式
[修饰符] var 计算属性名:属性类型{
get{
}
set(形参名){
}
}
*/ class User {
var first:String = ""
var last:String = ""
//定义计算属性
var fullName:String{
//定义计算属性的getter方法,该方法的返回值由first、last两个存储属性决定
get{
return first + "_" + last
}
//定义计算属性的setter方法
set(newValue){
var names = newValue.componentsSeparatedByString("_")
self.first = names[]
self.last = names[]
}
}
init(first:String,last:String){
self.first = first
self.last = last
}
}
//创建一个实例
let s = User(first: "heyang", last: "hello")
println(s.fullName)
s.fullName = "何杨_你好"
println(s.fullName)
//只读属性,则无需set部分,可以省略get和花括号 //属性观察者
/*
1.除了延迟存储属性之外的所有存储属性(包括实例存储属性和类型存储属性)
2.可通过重载方式为继承得到的属性(包括存储属性和计算属性)添加属性观察者
*/
//其实属性观察者就是 两个特殊的回调方法
/*
[修饰符]var 计算属性名:属性类型 = 初始值{
wilSet(newValue){
//属性即将被赋值之前自动调用的方法
}
didSet(oldValue){
//属性呗赋值完成之后自动调用的方法
}
}
*******参数可以省略*********
*/
class Person {
//定义存储属性
var name:String = ""{
willSet{
if(count(newValue)>) || (count(newValue)<){
println("您设置的人名字\(newValue)不符合要求,请重新设置")
}else{
println("人名符合要求,设置成功")
}
}
didSet{
println("人名设置完成,被修改的原名为:\(oldValue)")
}
}
var age:Int = {
willSet{
if newValue> || newValue<{
println("您设置的年龄\(newValue)不符合要求,请重新设置!")
}
else{
println("年龄设置符合要求,设置成功。")
}
}
didSet{
println("年龄设置完成,被修改的年龄为\(oldValue)")
}
}
}
//然后是创建实例
var p = Person()
p.name = "张三"
p.age =
println("\(p.name)")

运行结果:

Swift面向对象基础(中)——Swift中的存储属性和计算属性的更多相关文章

  1. Swift编程语言学习9—— 存储属性和计算属性

    属性将值跟特定的类.结构或枚举关联.存储属性存储常量或变量作为实例的一部分,计算属性计算(而不是存储)一个值.计算属性能够用于类.结构体和枚举里,存储属性仅仅能用于类和结构体. 存储属性和计算属性通经 ...

  2. Swift类与结构、存储属性、计算属性、函数与方法、附属脚本等

    写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类 ...

  3. swift 存储属性和计算属性 set{}和get{} didSet{}和willSet{}

    首先我们看一段代码: var A:Int = 0 var B:Int = 0 var C:Int { get { return 1 } set { print("Recived new va ...

  4. Swift面向对象基础(上)——Swift中的类和结构体(上)

    学习来自<极客学院> import Foundation //1.定义类和结构体 /* [修饰符]calss 类名{ 零到多个构造器 零到多个属性 零到多个方法 零到多个下标 } 修饰符可 ...

  5. Swift面向对象基础(中)——Swift中的方法

    学习来自<极客学院> 1.定义方法需要在类型(枚举,结构体,类)里定义,不能独立定义,独立定义的是函数 2.方法要么属于该类型本身,要么是该类型的一个实例 3.不能独立执行方法,执行方法必 ...

  6. Swift面向对象基础(上)——Swift中的枚举

    Swift中枚举 学习笔记来自<极客学院> import Foundation /**********1*Swift定义枚举的语法格式*************/ /* enum 枚举名 ...

  7. Swift面向对象基础(上)——Swift中的类和结构体(下)

    学习来自<极客学院> import Foundation class User { var name:String var age:Int init(name:String,age:Int ...

  8. iOS中 Swift初级入门学习(三)

    // // main.swift // LessonSwift-03 // // Copyright (c) 2015年 韩俊强. All rights reserved. // import Fou ...

  9. iOS - Swift 面向对象语法

    1.面向对象 面向过程:面向过程编成将所要解决的问题按解决问题的步骤进行分析.如果是大问题,就分解成为多个不同的小问题,在程序里叫做划分成不同的模块.每一个解决的步骤可能是一行或者几行代码,也可能是一 ...

随机推荐

  1. 15款提高工作效率的 Web 项目管理工具

    在今天的快节奏的商业世界里,能够通过计划.组织.和管理资源池以及评估开发资源的模式来管理一个项目,是一个很艰巨的任务. 有很多现成的项目管理软件来帮助减轻项目管理的负担,并且他们几乎覆盖了所有类型的业 ...

  2. Laravel 5 事件的使用

    事件类通常被保存在 app/Events 目录下,而它们的处理程序则被保存在 app/Handlers/Events 目录下. 事件的创建 下面我们用artisan来创建一个事件,比如叫CqhTest ...

  3. SQL Server里PIVOT运算符的”红颜祸水“

    在今天的文章里我想讨论下SQL Server里一个特别的T-SQL语言结构——自SQL Server 2005引入的PIVOT运算符.我经常引用这个与语言结构是SQL Server里最危险的一个——很 ...

  4. 前端自动化工具 -- Gulp 使用简介

    gulp是基于流的前端自动化构建工具. 之前也谈到了 grunt的用法,grunt其实就是配置+配置的形式. 而gulp呢,是基于stream流的形式,也就是前一个函数(工厂)制造出结果,提供后者使用 ...

  5. dp --- 2014 Asia AnShan Regional Contest --- HDU 5074 Hatsune Miku

    Hatsune Miku Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=5074 Mean: 有m种音符(note),现在要从 ...

  6. C#设计模式——原型模式(Prototype Pattern)

    一.概述 在软件开发中,经常会碰上某些对象,其创建的过程比较复杂,而且随着需求的变化,其创建过程也会发生剧烈的变化,但他们的接口却能比较稳定.对这类对象的创建,我们应该遵循依赖倒置原则,即抽象不应该依 ...

  7. 百度地图刷新显示不完整?(应该是和div顺序有关系)

    解决方案:1异步加载(jquery(function(){loadJScript():}))   2解析加载设置了个延迟(setTimeOut(getInit,1000))

  8. Codeforces Round #346 (Div. 2)---E. New Reform--- 并查集(或连通图)

    Codeforces Round #346 (Div. 2)---E. New Reform E. New Reform time limit per test 1 second memory lim ...

  9. floyd离散,最小环

    Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1,那么必须满足K& ...

  10. LGLProgressHUD

    不想用第三方的指示器,感觉有点大,自己写了一个简单的活动指示器,目前只有两种效果.效果如图 第一种: 第二种 第二种可以随着提示文字的增多而变长 LGLProgressHUD.h // // LGLP ...