You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
structPerson{varclothes:Stringvarshoes:Stringfunc describe(){print("I like wearing \(clothes) with \(shoes)")}}lettaylor=Person(clothes:"T-shirts", shoes:"sneakers")letother=Person(clothes:"short skirts", shoes:"high heels")
taylor.describe()// 输出:I like wearing T-shirts with sneakers
other.describe()// 输出:I like wearing short skirts with high heels
在方法中使用类型的属性时,将自动使用属于当前对象的值。
property observers
Swift可以观察属性值,在属性即将被修改或已更改时调用代码。
两种属性观察者:
willSet:在属性更改之前调用。可以通过newValue获取新属性值
didSet:在属性更改之后调用。可以通过oldValue获取之前的值
code:
structPerson{varclothes:String{
willSet {updateUI(msg:"I'm changing from \(clothes) to \(newValue)")}
didSet {updateUI(msg:"I just changed from \(oldValue) to \(clothes)")}}}func updateUI(msg:String){print(msg)}vartaylor=Person(clothes:"T-shirts")// 输出:I'm changing from T-shirts to short skirts
taylor.clothes ="short skirts"// 输出:I just changed from T-shirts to short skirts
computed properties
计算属性。
structPerson{varage:IntvarageInDogYears:Int{get{return age *7}}// 仅用于读取数据则可以省略`get{}`varageInDogYears2:Int{return age *7}}varfan=Person(age:25)print(fan.ageInDogYears)// 输出:175
静态的属性和方法
关键字:static
调用:类型名.属性/方法名()
structTaylorFan{staticvarfavoriteSong="Look What You Made Me Do"varname:Stringvarage:Int}//let fan = TaylorFan(name: "James", age: 25)print(TaylorFan.favoriteSong)
classAlbum{varname:Stringinit(name:String){self.name = name
}}classStudioAlbum:Album{varstudio:Stringinit(name:String, studio:String){self.studio = studio
super.init(name: name)}}classLiveAlbum:Album{varlocation:Stringinit(name:String, location:String){self.location = location
super.init(name: name)}}vartaylorSwift=StudioAlbum(name:"Taylor Swift", studio:"The Castles Studios")varfearless=StudioAlbum(name:"Speak Now", studio:"Aimeeland Studio")variTunesLive=LiveAlbum(name:"iTunes Live from SoHo", location:"New York")// StudioAlbum & LiveAlbum 都可以被看做是 Album 类varallAlbums:[Album]=[taylorSwift, fearless, iTunesLive]
多态
classAlbum{varname:Stringinit(name:String){self.name = name
}func getPerformance()->String{return"The album \(name) sold lots"}}classStudioAlbum:Album{varstudio:Stringinit(name:String, studio:String){self.studio = studio
super.init(name: name)}overridefunc getPerformance()->String{return"The studio album \(name) sold lots"}}classLiveAlbum:Album{varlocation:Stringinit(name:String, location:String){self.location = location
super.init(name: name)}overridefunc getPerformance()->String{return"The live album \(name) sold lots"}}vartaylorSwift=StudioAlbum(name:"Taylor Swift", studio:"The Castles Studios")varfearless=StudioAlbum(name:"Speak Now", studio:"Aimeeland Studio")variTunesLive=LiveAlbum(name:"iTunes Live from SoHo", location:"New York")varallAlbums:[Album]=[taylorSwift, fearless, iTunesLive]
for album in allAlbums {print(album.getPerformance())}// 依次输出:// The studio album Taylor Swift sold lots// The studio album Speak Now sold lots// The live album iTunes Live from SoHo sold lots
向下转型 as
Swift的类型转换
as:类型转换,比较少用(没有处理异常)
as?:可能会失败的类型转换
as!:一定能转换,如果出错,则程序会崩溃
for album in allAlbums {print(album.getPerformance())// 通过类型转换,来调用额外的属性
if let studioAlbum = album as?StudioAlbum{print(studioAlbum.studio)}else if let liveAlbum = album as?LiveAlbum{print(liveAlbum.location)}}
iOS学习笔记(三)基础篇(下)
环境版本:
属性
结构和类(统称为“类型”)可以有自己的变量和常量,这些属性被称为属性。
在方法中使用类型的属性时,将自动使用属于当前对象的值。
property observers
Swift
可以观察属性值,在属性即将被修改或已更改时调用代码。两种属性观察者:
willSet
:在属性更改之前调用。可以通过newValue
获取新属性值didSet
:在属性更改之后调用。可以通过oldValue
获取之前的值code:
computed properties
计算属性。
静态的属性和方法
关键字:
static
调用:类型名.属性/方法名()
存放全局信息
可以用来存放全局的用户信息
这样就可以在多个视图控制器中访问
access control
swift
代码才能读写此属性多态性和类型转换
类可以互相继承,这意味着一个类实际上是另一个类的超集:类
B
具有A
所具有的所有东西,还包括一些额外的。同时也可以将B
看做B
类或者A
类。多态
向下转型 as
Swift的类型转换
当Swift不知道对象的类型时,类型转换很有用。但当Swift明白对象的实际类型时,就不能强制转换为不相关的类型。
闭包
闭包可以被认为是保存代码的变量。
闭包本身就是一种数据类型:可以将闭包作为参数传递或者将其存储为属性。
The text was updated successfully, but these errors were encountered: