网站建设基本流程备案网络营销的八种方式
一个朴实无华的目录
- 今日学习内容:
- 1.Swift 枚举:一组有共同特性的数据的集合。
- 相关值
- 原始值
- 2.Swift 结构体(self. == this. )
- 3.Swift 类
- 恒等运算符
- 4.Swift 属性
- 4.1存储属性
- 4.2延迟存储属性:当第一次被调用的时候才会计算其初始值的属性。
- 4.3计算属性:计算属性不直接存储值,而是提供一个 getter 来获取值,一个可选的 setter 来间接设置其他属性或变量的值。
- 4.4只读计算属性:只有 getter 没有 setter 的计算属性
- 4.5属性观察器:每次属性被设置值的时候都会调用属性观察器
- 4.6类型属性
- 4.7获取和设置类型属性的值
今日学习内容:
1.Swift 枚举:一组有共同特性的数据的集合。
import Cocoa// 定义枚举
enum DaysofaWeek {case Sundaycase Mondaycase TUESDAYcase WEDNESDAYcase THURSDAYcase FRIDAYcase Saturday
}var weekDay = DaysofaWeek.THURSDAY
weekDay = .THURSDAY
switch weekDay
{
case .Sunday:print("星期天")
case .Monday:print("星期一")
case .TUESDAY:print("星期二")
case .WEDNESDAY:print("星期三")
case .THURSDAY:print("星期四")
case .FRIDAY:print("星期五")
case .Saturday:print("星期六")
}
相关值
import Cocoaenum Student{case Name(String)case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Runoob")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):print("学生的名字是: \(studName)。")
case .Mark(let Mark1, let Mark2, let Mark3):print("学生的成绩是: \(Mark1),\(Mark2),\(Mark3)。")
}
原始值
import Cocoaenum Month: Int {case January = 1, February, March, April, May, June, July, August, September, October, November, December
}let yearMonth = Month.May.rawValue
print("数字月份为: \(yearMonth)。")
2.Swift 结构体(self. == this. )
我们通过结构体名 ‘studentMarks’ 访问学生的成绩。结构体成员初始化为mark1, mark2, mark3,数据类型为整型。
然后我们通过使用 let 关键字将结构体 studentMarks() 实例化并传递给 marks。
最后我们就通过 . 号来访问结构体成员的值。
import Cocoastruct studentMarks {var mark1 = 100var mark2 = 78var mark3 = 98
}
let marks = studentMarks()
print("Mark1 是 \(marks.mark1)")
print("Mark2 是 \(marks.mark2)")
print("Mark3 是 \(marks.mark3)")
以下实例化通过结构体实例化时传值并克隆一个结构体:
import Cocoastruct MarksStruct {var mark: Intinit(mark: Int) {self.mark = mark}
}
var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct // aStruct 和 bStruct 是使用相同值的结构体!
bStruct.mark = 97
print(aStruct.mark) // 98
print(bStruct.mark) // 97
3.Swift 类
Swift 并不要求你为自定义类去创建独立的接口和实现文件。你所要做的是在一个单一文件中定义一个类,系统会自动生成面向其它代码的外部接口。
import Cocoaclass MarksStruct {var mark: Intinit(mark: Int) {self.mark = mark}
}class studentMarks {var mark1 = 300var mark2 = 400var mark3 = 900
}
let marks = studentMarks()
print("Mark1 is \(marks.mark1)")
print("Mark2 is \(marks.mark2)")
print("Mark3 is \(marks.mark3)")
恒等运算符
恒等运算符 | 不恒等运算符 |
---|---|
运算符为:=== | 运算符为:!== |
如果两个常量或者变量引用同一个类实例则返回 true | 如果两个常量或者变量引用不同一个类实例则返回 true |
import Cocoaclass SampleClass: Equatable {let myProperty: Stringinit(s: String) {myProperty = s}
}
func ==(lhs: SampleClass, rhs: SampleClass) -> Bool {return lhs.myProperty == rhs.myProperty
}let spClass1 = SampleClass(s: "Hello")
let spClass2 = SampleClass(s: "Hello")if spClass1 === spClass2 {// falseprint("引用相同的类实例 \(spClass1)")
}if spClass1 !== spClass2 {// trueprint("引用不相同的类实例 \(spClass2)")
}
以上程序执行输出结果为:
引用不相同的类实例 SampleClass
4.Swift 属性
4.1存储属性
import Cocoastruct Number
{var digits: Intlet pi = 3.1415
}var n = Number(digits: 12345)
n.digits = 67print("\(n.digits)")
print("\(n.pi)")以上程序执行输出结果为:
67
3.1415
4.2延迟存储属性:当第一次被调用的时候才会计算其初始值的属性。
import Cocoaclass sample {lazy var no = number() // `var` 关键字是必须的
}class number {var name = "Runoob Swift 教程"
}var firstsample = sample()
print(firstsample.no.name)以上程序执行输出结果为:
Runoob Swift 教程
4.3计算属性:计算属性不直接存储值,而是提供一个 getter 来获取值,一个可选的 setter 来间接设置其他属性或变量的值。
import Cocoaclass sample {var no1 = 0.0, no2 = 0.0var length = 300.0, breadth = 150.0var middle: (Double, Double) {get{return (length / 2, breadth / 2)}set(axis){no1 = axis.0 - (length / 2)no2 = axis.1 - (breadth / 2)}}
}var result = sample()
print(result.middle)
result.middle = (0.0, 10.0)print(result.no1)
print(result.no2)
以上程序执行输出结果为:(150.0, 75.0)
-150.0
-65.0
4.4只读计算属性:只有 getter 没有 setter 的计算属性
import Cocoaclass film {var head = ""var duration = 0.0var metaInfo: [String:String] {return ["head": self.head,"duration":"\(self.duration)"]}
}var movie = film()
movie.head = "Swift 属性"
movie.duration = 3.09print(movie.metaInfo["head"]!)
print(movie.metaInfo["duration"]!)
以上程序执行输出结果为:
Swift 属性
3.09
4.5属性观察器:每次属性被设置值的时候都会调用属性观察器
willSet在设置新的值之前调用
didSet在新的值被设置之后立即调用
import Cocoaclass Samplepgm {var counter: Int = 0{willSet(newTotal){print("计数器: \(newTotal)")}didSet{if counter > oldValue {print("新增数 \(counter - oldValue)")}}}
}
let NewCounter = Samplepgm()
NewCounter.counter = 100
NewCounter.counter = 800
以上程序执行输出结果为:计数器: 100
新增数 100
计数器: 800
新增数 700
4.6类型属性
类型属性是作为类型定义的一部分写在类型最外层的花括号({})内。
struct Structname {static var storedTypeProperty = " "static var computedTypeProperty: Int {// 这里返回一个 Int 值}
}enum Enumname {static var storedTypeProperty = " "static var computedTypeProperty: Int {// 这里返回一个 Int 值}
}class Classname {class var computedTypeProperty: Int {// 这里返回一个 Int 值}
}
4.7获取和设置类型属性的值
import Cocoastruct StudMarks {static let markCount = 97static var totalCount = 0var InternalMarks: Int = 0 {didSet {if InternalMarks > StudMarks.markCount {InternalMarks = StudMarks.markCount}if InternalMarks > StudMarks.totalCount {StudMarks.totalCount = InternalMarks}}}
}var stud1Mark1 = StudMarks()
var stud1Mark2 = StudMarks()stud1Mark1.InternalMarks = 98
print(stud1Mark1.InternalMarks) stud1Mark2.InternalMarks = 87
print(stud1Mark2.InternalMarks)