The REST API can be used to make authenticated Twitter API requests. Though it can be accessed manually, we recommend using the convenience methods whenever possible.
//: 在实例方法中修改值类型(Modifying Value Types from Within Instance Methods) //: 结构体和枚举是值类型。一般情况下,值类型的属性不能在它的实例方法中被修改。但是,如果你确实需要在某个特定的方法中修改结构体或者枚举的属性,你可以选择变异(mutating)这个方法,然后方法就可以从方法内部改变它的属性;并且它做的任何改变在方法结束时还会保留在原始结构中。方法还可以给它隐含的self属性赋值一个全新的实例,这个新实例在方法结束后将替换原来的实例。 structPoint { var x =0.0, y =0.0 mutatingfuncmoveByX(deltaX: Double, ydeltaY: Double) { x += deltaX y += deltaY } }
var somePoint =Point(x: 3.0, y: 3.0) somePoint.moveByX(2.0, y: 3.0)
//: 在可变方法中给 self 赋值(Assigning to self Within a Mutating Method) structPoint1 { var x =0.0, y =0.0 mutatingfuncmoveByX(deltaX: Double, ydeltaY: Double) { self=Point1(x: x + deltaX, y: y + deltaY) } } //: 这里不仅仅学习一个语法,而是思考为什么费劲把默认不可变的枚举变成可变,是因为提供一个可能结合枚举特性,写出简洁表达能力强的代码。 //: Ash Furrow: Ideas vs Syntax. Watch video here: https://youtu.be/YsUTuwpbURA enumTriStateSwitch { caseOff, Low, High mutatingfuncnext() { switchself { caseOff: self=Low caseLow: self=High caseHigh: self=Off } } }
var ovenLight =TriStateSwitch.Low ovenLight.next() ovenLight.next() //: 类型方法 (Type Methods)
classPlayer { var tracker =LevelTracker() let playName: String funccompeletedLevel(level: Int) { LevelTracker.unlockLevel(level +1) tracker.advanceToLevel(level +1) } init(name:String) { playName = name } }
var player =Player.init(name: "Will") player.compeletedLevel(4) print(LevelTracker.highestunlockedLevel)
player =Player.init(name: "Ge") if player.tracker.advanceToLevel(6) { print("Level 6 has been unlocked.") } else { print("Level 6 has not yet been unlocked.") }
教材中MyTimer是Custom ViewController,我实际工作中是 UIView,也是参考了另外一篇 Apple 的教程:Implement a Custom Control。发现开发真的离不开 Google,但是前提是要有思路,或者对一个项目或者难题,要有整体的框架和可用的知识点熟悉。
classGenderPickerView: UIView, UIPickerViewDataSource, UIPickerViewDelegate { var delegate: GenderPickerViewDelegate! var toolbar: UIToolbar! var picker: UIPickerView! var genderPickerViewData = ["不告诉你", "男", "女"] var genderSelectedRow =0
let vga =Resolution(width: 640, height: 480) let hd =Resolution(width: 1920, height: 1080) var cinema = hd cinema.height =3096 cinema.width hd let tenEighty =VideoMode() var asloTenEighty = tenEighty asloTenEighty.frameRate =30.0 tenEighty.frameRate
//: 恒等运算符 Identity Operators : === !== if tenEighty === asloTenEighty { print("These two variables refer to the same instance") }
//: 指针 Pointers //: Swift指针类型不用带 *
//: 类和结构体的选择: 结构体适合存储简单数据值和拷贝行为, 不需要继承另一个类型属性或者行为
//: String/Array/Dictionary 类型的赋值和复制行为:Assignment and copy behaviors on Strings, Arrays and Dicitonaries
//: Swift 均以结构体形式实现,值拷贝,但是处于性能优化,只哟确有必要时才会实际执行拷贝;Objective-C是类,传递的是实例的引用。
//: 函数也是一个递归函数 funcevaluate(expression: AE) -> Int { switch expression { case .Number(let value): return value case .Addition(let left, let right): return evaluate(left) + evaluate(right) case .Multiplicaiton(let left, let right): return evaluate(left) * evaluate(right) } }