Swift面向对象基础(中)——Swift中的存储属性和计算属性

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

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

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

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

 1 import Foundation
 2  3 struct lengthRang {
 4  var start:Int
 5 //定义常量存储属性,可以不指定初始值  6  let length:Int
 7 }
 8 //创建结构体的实例变量  9 var len = lengthRang(start: 12, length: 2)
 10 println("len的起点为\(len.start),长度为\(len.length)")
 11  12 //延迟存储属性:第一次被调用时候才会被计算初始值的属性,用lazy修饰符
 13 //当某个实例是一个创建成本比较大的实例的引用的时候,使用延迟存储可以提高程序的性能
 14 //延迟存储属性只能被定义成变量,也就是var关键字创建,所以不能用let创建
 15  16 //计算属性:就是set和get方法的组合  17 /*语法格式
 18 [修饰符] var 计算属性名:属性类型{
 19  get{
 20  }
 21  set(形参名){
 22  }
 23 }
 24 */  25  26 class User {
 27 var first:String = ""  28 var last:String = ""  29 //定义计算属性  30  var fullName:String{
 31 //定义计算属性的getter方法,该方法的返回值由first、last两个存储属性决定  32 get{
 33 return first + "_" + last
 34  }
 35 //定义计算属性的setter方法  36 set(newValue){
 37 var names = newValue.componentsSeparatedByString("_")
 38 self.first = names[0]
 39 self.last = names[1]
 40  }
 41  }
 42  init(first:String,last:String){
 43 self.first = first
 44 self.last = last
 45  }
 46 }
 47 //创建一个实例  48 let s = User(first: "heyang", last: "hello")
 49 println(s.fullName)
 50 s.fullName = "何杨_你好"  51 println(s.fullName)
 52 //只读属性,则无需set部分,可以省略get和花括号
 53  54  55  56  57 //属性观察者  58 /*  59 1.除了延迟存储属性之外的所有存储属性(包括实例存储属性和类型存储属性)
 60 2.可通过重载方式为继承得到的属性(包括存储属性和计算属性)添加属性观察者
 61 */  62 //其实属性观察者就是 两个特殊的回调方法  63 /*  64 [修饰符]var 计算属性名:属性类型 = 初始值{
 65 wilSet(newValue){
 66 //属性即将被赋值之前自动调用的方法
 67 }
 68 didSet(oldValue){
 69 //属性呗赋值完成之后自动调用的方法
 70 }
 71 }
 72 *******参数可以省略*********
 73 */  74 class Person {
 75 //定义存储属性  76 var name:String = ""{
 77  willSet{
 78 if(count(newValue)>6) || (count(newValue)<2){
 79 println("您设置的人名字\(newValue)不符合要求,请重新设置")
 80 }else{
 81 println("人名符合要求,设置成功")
 82  }
 83  }
 84  didSet{
 85 println("人名设置完成,被修改的原名为:\(oldValue)")
 86  }
 87  }
 88 var age:Int = 0{
 89  willSet{
 90 if newValue>100 || newValue<0{
 91 println("您设置的年龄\(newValue)不符合要求,请重新设置!")
 92  }
 93 else{
 94 println("年龄设置符合要求,设置成功。")
 95  }
 96  }
 97  didSet{
 98 println("年龄设置完成,被修改的年龄为\(oldValue)")
 99  }
100  }
101 }
102 //然后是创建实例 103 var p = Person()
104 p.name = "张三" 105 p.age = 21 106 println("\(p.name)")


运行结果:

时间: 2024-09-14 14:03:10

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

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

学习来自<极客学院> 1 import Foundation 2 3 //1.定义类和结构体 4 /* 5 [修饰符]calss 类名{ 6 零到多个构造器 7 零到多个属性 8 零到多个方法 9 零到多个下标 10 } 11 修饰符可以是:private public internal final 12 */ 13 14 /*定义结构体 15 [修饰符]struct 结构体名{ 16 17 } 18 修饰符可以是:private public internal 19 */ 20 21 /*

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

Swift中枚举 学习笔记来自<极客学院> 1 import Foundation 2 3 /**********1*Swift定义枚举的语法格式*************/ 4 /* 5 enum 枚举名 { 6 使用case关键字列出所有枚举值 7 枚举的其他成员 8 } 9 */ 10 //定义枚举 11 enum Season{ 12 case Spring 13 case Summer 14 case Fall 15 case Winter 16 } 17 //使用一个case列举所

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

学习来自<极客学院> 1 import Foundation 2 3 class User { 4 var name:String 5 var age:Int 6 init(name:String,age:Int){ 7 self.age = age 8 self.name = name 9 } 10 } 11 var u1 = User(name:"何杨",age:23) 12 var u2 = User(name:"何杨",age:23) 13 pr

Java面向对象基础--String类中常用的方法

split()和replaceAll()这两个方法需要正则支持. public class StringAPIDemo06{ public static void mian(String args[]){ String str1 = " hello "; //定义字符串 System.out.println(str1.trim());//去掉左右空格后输出 } }

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

// // main.swift // LessonSwift-03 // // Copyright (c) 2015年 韩俊强. All rights reserved. // import Foundation // 声明一个类, 我们用class关键字修饰 // 类可以被继承, 它是引用类型 class Student { var name = "小米" var gender = "男" var age = 18 } // 创建一个student实例 let

iOS - Swift 面向对象语法

1.面向对象 面向过程:面向过程编成将所要解决的问题按解决问题的步骤进行分析.如果是大问题,就分解成为多个不同的小问题,在程序里叫做划分成不同的模块.每一个解决的步骤可能是一行或者几行代码,也可能是一个函数.这样把每一个步骤都实现或者解决掉,最后把所有的解决手段按顺序进行调用,如果遇到一些意外情况就分情况处理,如果遇到重复的操作就循环处理,如此就完成了整个程序. 面向对象:以面向对象的方式去解决问题的思路,我们关注的往往不是解决问题的步骤.更多的是将问题所涉及的方面进行一些角色层次上的划分.在每

《从零开始学Swift》学习笔记(Day 32)——计算属性

原创文章,欢迎转载.转载请注明:关东升的博客  计算属性本身不存储数据,而是从其他存储属性中计算得到数据.  计算属性概念: 计算属性提供了一个getter(取值访问器)来获取值,以及一个可选的setter(设置访问器)来间接设置其他属性或变量的值.计算属性的语法格式如下: 面向对象类型 类型名 { 存储属性 ...... var 计算属性名: 属性数据类型 { get { return 计算后属性值 } set (新属性值) { ...... } } } 定义计算属性比较麻烦,要注意后面的几个

详解Swift面向对象编程中的方法(method)_Swift

struct Point { var x:Double var y:Double mutating func move(x:Double,y:Double) { self = Point(x: self.x+x,y: self.y+y) } static func name(){ print("Point") } } Point.name() 一.引言 方法只是一个术语,其实就是将函数与特定的类型结合,类.结构体.枚举都可以定义方法,方法又分为实例方法和类型方法,类型方法类似于Obje

解析Swift语言面相对象编程中的继承特性_Swift

取大于形态的能力被定义为继承.一般一个类可以从另一个类继承属性和方法.类可以进一步划分到子类和超类. 子类:当一个类从另一个类继承属性,方法和功能被称为子类 超类:类包含属性,方法和功能被其它类继承称为超类 Swift 中类包含父类和调用访问方法,属性,功能和重写方法.另外,属性观察者也用于添加属性和修改所存储的或计算的特性的方法. 基类一个类如果不从其它类继承方法,属性或功能,那么它被称为"基类". 复制代码 代码如下: classStudDetails{var stname:Str