1 iOS Programming. 類別 class Employee{ var no:Int=0 var name:String="" var job:String? } var (or...

34
1 iOS Programming

Transcript of 1 iOS Programming. 類別 class Employee{ var no:Int=0 var name:String="" var job:String? } var (or...

1

iOS Programming

類別 class Employee{

var no:Int=0

var name:String=""

var job:String?

}

var (or let) emp1=Employee()

emp1.name="John"

emp1.job="Teacher“

var (or let) emp2=Employee()

emp2.name="Mary"

if emp1===emp2 {

println("emp1===emp2")

}else{

println("emp1!==emp2")

}

類別 class Employee{

var name:String=""

var upperName:String{

get{

return name

}

set(inName){

name=inName.uppercaseString

}

}

}

Getter & Setter var emp=Employee()

emp.upperName="John"

println("\(emp.upperName)")

類別 class Employee{

var name:String=""

var upperName:String{

return name

}

}

Readonly var emp=Employee()

emp.upperName="John"

println("\(emp.upperName)")

類別 靜態屬性

◦ class Employee{◦ class var staticVar:Int{◦ return 5◦ }

◦ println("\(Employee.staticVar)")

類別 實體方法

◦ class Employee{◦ var name:String=""◦ func echoName()->String{◦ return name◦ }◦ }◦ var emp=Employee()◦ emp.name="John"◦ println("\(emp.echoName())")

類別 靜態方法

◦ class Employee{◦ var name:String=""◦ class func countSalary(hours:Int)->Int{◦ return hours*115◦ }◦ }◦ println("\(Employee.countSalary(15))")

類別 建構子

◦ class Employee{◦ let no:Int◦ var salary:Double◦ var name:String=""◦ init(){◦ no=5◦ salary=115◦ }◦ }

◦ var emp=Employee()

類別◦ class Employee{◦ let no:Int◦ var salary:Double◦ var name:String="" ◦ init(no:Int,salary:Double){◦ self.no=no◦ self.salary=salary◦ }◦ }

◦ var emp=Employee(no:10,salary:200.0)

◦ class Employee{◦ let no:Int◦ var salary:Double◦ var name:String=""◦ init(N no:Int,S salary:Double){◦ self.no=no◦ self.salary=salary◦ }◦ }

◦ var emp=Employee(N:10,S:200.0)

類別 建構子橫向代理

◦ class Employee{◦ let no:Int◦ var salary:Double◦ convenience init(){◦ self.init(no:40,salary:300.0)◦ }◦ init(no:Int,salary:Double){◦ self.no=no◦ self.salary=salary◦ }◦ }

類別 解構子

◦ class Employee{◦ …◦ deinit{◦ println("deinit")◦ }◦ }

◦ var emp:Employee?=Employee()◦ emp=nil

類別 optional

◦ class Employee{◦ var name:String?◦ var job:String?◦ }

◦ var emp:Employee?=Employee()◦ emp!.name="John"◦ emp?.job="Teacher"

◦ class Employee{◦ var name:String?◦ var job:String?◦ var dept:Department?◦ }◦ class Department{◦ var name:String="Sales"◦ }

◦ var emp:Employee=Employee()◦ println("\(emp.dept?.name)")◦ println("\(emp.dept!.name)")

類別繼承 class Person{

var name:String

var age:Int

init(age:Int,name:String){

self.age=age

self.name=name

}

}

class Student:Person{

var school:String

init(school:String){

self.school=school

super.init(age: 20, name: "John")

}

}

建構子繼承

類別繼承 class Student:Person{

var school:String

override var age:Int{

get{

return super.age

}

set{

super.age=newValue+5

}

}

}

var s:Student=Student(school: "NOTU")

s.age=30

println("\(s.age)")

屬性覆蓋

類別繼承 class Student:Person{

var school:String

func desc()->Void{

println("age=\(age),name=\(name)")

}

}

class Student:Person{

var school:String

override func desc()->Void{

super.desc()

println("age=\(self.age),name=\(name)")

}

}

屬性覆蓋

類別繼承 final class

◦ final class Person{◦ …◦ }

◦ class Student:Person{ Error!

◦ …◦ }

類別繼承 is 運算子

◦ class Person{◦ }◦ class Student:Person{◦ }

◦ if s is Student {◦ println("s is Student")◦ }

類別繼承 as 運算子

◦ class Person{◦ }◦ class Student:Person{◦ }

◦ var p:Person=Student(school: "NTOU")◦ var s:Student=p as! Student

列舉 enum WeekDays{

case Mon

case Tue

case Wed

case Thu

case Fri

}

enum WeekDays{

case Mon,Tue,Wed,Thu,Fri

}

func dayText(d:WeekDays){

switch d{

case .Mon:

println(" 星期一 ")

case .Tue:

println(" 星期二 ")

default:

println("Default")

}

}

var day=WeekDays.Mon

dayText(day)

列舉 enum Figure{

case Rect(Int,Int)

case Circle(Int)

}

func processFigure(figure:Figure){

switch figure {

case .Rect(let w, let h):

println("Rect")

case .Circle(let r):

println("Circle")

}

}

var f=Figure.Rect(10, 5)

processFigure(f)

f=Figure.Circle(10)

processFigure(f)

Struct struct Department {

let no:Int=0

var name:String=""

}

var (or let) dept:Department=Department()

dept.name="Salse"

Struct class Employee{

let no:Int=0

var name:String=""

}

func updateEmp(emp:Employee){

emp.name="John"

}

OK!

struct Department{

let no:Int=0

var name:String=""

}

func updateDept(dept:Department){

dept.name="Salse"

}

Error!

Struct Method

◦ struct Department{◦ let no:Int=0◦ var name:String=""◦ static var companyName:String="NTOU"◦ static func getCompanyName()->String{◦ return companyName◦ }◦ mutating func changeName(newName:String){◦ name=newName◦ }◦ }

◦ var dept:Department=Department()◦ dept.changeName("HR")◦ println("\(dept.name)")

◦ println("\(Department.getCompanyName())")

延遲屬性 Lazy

◦ class Employee{◦ let no:Int=0◦ var name:String=""◦ lazy var dept:Department=Department()◦ }◦ struct Department{◦ let no:Int=0◦ var name:String=""◦ }

AnyObject and Any class Person{

}

class Student:Person{

}

class Worker{

}

var Person1:Person=Person()

var Student1:Student=Student()

var Student2:Student=Student()

var Worker1:Worker=Worker()

var Worker2:Worker=Worker()

let People1:[AnyObject]=[Person1,Student1,Student2,Worker1,Worker2]

let People2:[Any]=[Person1,Student1,Student2,Worker1,Worker2]

for item in People1{

if item is Student {

println("Student")

}

}

Extension 延伸屬性

◦ extension Int{◦ var errorMsg:String{◦ var errorText=""◦ switch self {◦ case -1:◦ errorText="Eroor 1"◦ case -2:◦ errorText="Eroor 2"◦ default:◦ errorText=""◦ }◦ return errorText◦ }◦ }

◦ i:Int=(-1)◦ println("\(i.errorMsg)")

◦ class Employee{◦ var no:Int=0◦ var name:String=""◦ }

◦ extension Employee{◦ var deptName:String{◦ return "DeptName"◦ }◦ }

◦ var emp:Employee=Employee()◦ println("\(emp.deptName)")

Extension 延伸方法

◦ extension Double{◦ static var Rate=0.8◦ func getDiscount1()->Double{◦ return self*Double.Rate◦ }◦ mutating func changeValue(newValue:Double){◦ self=newValue◦ }◦ static func getDiscount2(v:Double)->Double{◦ return v*Rate◦ }◦ }

◦ var d:Double=900.0◦ d.changeValue(800.0)◦ println("\(d.getDiscount1())")◦ println("\(Double.getDiscount2(500))")

Protocol protocol Figure{

func onDraw()->Void

}

Rect:Figure{

func onDraw() {

println("Rect Draw")

}

}

struct Circle:Figure{

func onDraw() {

println("Circle")

}

}

let rect:Figure=Rect()

rect.onDraw()

let circle:Figure=Circle()

circle.onDraw()

Protocol protocol Figure{

static func onDraw()->Void

}

class Rect:Figure{

class func onDraw() {

println("Rect Draw")

}

}

struct Circle:Figure{

static func onDraw() {

println("Circle")

}

}

Rect.onDraw()

Circle.onDraw()

Protocol protocol Figure{

mutating func onDraw()->Void

}

class Rect:Figure{

var isDraw:Bool=false

func onDraw() {

println("Rect Draw")

isDraw=true

}

}

struct Circle:Figure{

var isDraw:Bool=false

mutating func onDraw() {

println("Circle")

isDraw=true

}

}

Protocol protocol Person{

var name:String{get set}

var fullName:String{get}

}

class Employee:Person{

var name:String=""

var fullName:String{

get{

return name.uppercaseString

}

set(newValue){

self.name=newValue

}

}

}

Protocol protocol Person{

static var fullName:String{get}

}

class Employee:Person{

class var fullName:String{

return "John"

}

}

struct Manager:Person {

static var fullName:String=""

}

參考 class Employee{

var dept:Department?

init(){

dept=Department(emp:self)

}

}

class Department {

var emp:Employee

init(emp:Employee){

self.emp=emp

}

}

強參考

強參考

參考 class Employee{

var dept:Department?

init(){

dept=Department(emp:self)

}

}

class Department {

weak var emp:Employee?

init(emp:Employee){

self.emp=emp

}

}

強參考

弱參考