Hello Swift Final 5/5 - Structures and Classes

46
Welcome to Swift 5/5 Final class Counter { var count = 0 func increment() { count++ } }

description

How to use structure and class in Swift? Please check this slide.

Transcript of Hello Swift Final 5/5 - Structures and Classes

Page 1: Hello Swift Final 5/5 - Structures and Classes

Welcome to Swift 5/5 Final

class Counter { var count = 0 func increment() { count++ }}

Page 2: Hello Swift Final 5/5 - Structures and Classes

•Structure•Classes

다룰 내용

Page 3: Hello Swift Final 5/5 - Structures and Classes

Same things Structures and Classes

•값을 저장하는 프로퍼티를 정의

•기능을 제공하는 메소드를 정의

•Subscript를 이용하여 값에 접근하도록 Subscript를 정의

•초기상태를 설정하기 위한 생성자를 정의

•기본 구현을 바탕으로 기능을 확장

•프로토콜을 이용하여 표준 기능을 제공하도록함

Page 4: Hello Swift Final 5/5 - Structures and Classes

Additional capabilities at Classes

•상속

•런타임에 타입을 해석하고, 체크하여 캐스팅(다형성)

•클래스의 인스턴스를 소멸

•하나 이상의 참조 카운팅

Page 5: Hello Swift Final 5/5 - Structures and Classes

Definition Classes and Structure Syntax

class FirstClass { }

class FirstStructure { }

Page 6: Hello Swift Final 5/5 - Structures and Classes

Definition Classes and Structure Syntax

struct FirstStructure { }

class FirstClass { }

Page 7: Hello Swift Final 5/5 - Structures and Classes

Definition Classes and Structure Syntax

struct FirstStructure { var width = 0 var height = 0}

class FirstClass { var first = FirstStructure() var name = "Cody"}

Page 8: Hello Swift Final 5/5 - Structures and Classes

Using Classes and Structure

struct FirstStructure { var width = 0 var height = 0}

class FirstClass { var first = FirstStructure() var name = "Cody"}

var classInstance = FirstClass()var structInstance = FirstStructure()

Page 9: Hello Swift Final 5/5 - Structures and Classes

Access to Properties

struct FirstStructure { var width = 0 var height = 0}

class FirstClass { var first = FirstStructure() var name = "Cody"}

var classInstance = FirstClass()var structInstance = FirstStructure()

structInstance.widthclassInstance.name

Page 10: Hello Swift Final 5/5 - Structures and Classes

Automatically generated memberwise init

struct FirstStructure { var width = 0 var height = 0}

class FirstClass { var first = FirstStructure() var name = ""}

var structInstance = FirstStructure(width:100,height:200)

var classInstance = FirstClass(name:"Gwangho")

Page 11: Hello Swift Final 5/5 - Structures and Classes

Automatically generated memberwise init

struct FirstStructure { var width = 0 var height = 0}

class FirstClass { var first = FirstStructure() var name = ""}

var structInstance = FirstStructure(width:100,height:200)

var classInstance = FirstClass(name:"Gwangho")

// 이건 참 편한 문법인것 같은데 구조체만 됩니다. class는 안되요.

Extra argument 'name' in call'

Page 12: Hello Swift Final 5/5 - Structures and Classes

Copied value type in Structure

struct FirstStructure { var width = 0 var height = 0}

var instance1 = FirstStructure(width:100,height:200)var instance2 = instance1instance2.width = 300

instance1.width // 100instance2.width // 300

Page 13: Hello Swift Final 5/5 - Structures and Classes

But Classes are Reference Types

class FirstClass { var name = ""}

var instance1 = FirstClass()instance1.name = "Daum"var instance2 = instance1instance2.name = "KAKAO"

instance1.name // KAKAOinstance2.name // KAKAO

Page 14: Hello Swift Final 5/5 - Structures and Classes

Identity Operators

class FirstClass { var name = ""}

var instance1 = FirstClass()var instance2 = instance1

if instance1==instance2 { "Equal"}

Page 15: Hello Swift Final 5/5 - Structures and Classes

Identity Operators

class FirstClass { var name = ""}

var instance1 = FirstClass()var instance2 = instance1

if instance1==instance2 { "Equal"}

Could not find an overload for '==' that accepts the supplied arguments

Page 16: Hello Swift Final 5/5 - Structures and Classes

Identity Operators

class FirstClass { var name = ""}

var instance1 = FirstClass()var instance2 = instance1

if instance1===instance2 { "Equal"}

Page 17: Hello Swift Final 5/5 - Structures and Classes

Identity Operators

class FirstClass { var name = ""}

var instance1 = FirstClass()var instance2 = instance1

if instance1!==instance2 { "Not Equal to"}

Page 18: Hello Swift Final 5/5 - Structures and Classes

Choosing Between Classes and Structures

•Reference Type•Value type

Page 19: Hello Swift Final 5/5 - Structures and Classes

Copy Behavior in Dicrionary

var ages = ["Peter": 23, "Wei": 35, "Anish": 65, "Katya": 19]var copiedAges = ages

ages["Peter"] = 32copiedAges["Peter"]

Page 20: Hello Swift Final 5/5 - Structures and Classes

Copy Behavior in Array

var a = [1, 2, 3]var b = a

a[0] = 10

ab

Page 21: Hello Swift Final 5/5 - Structures and Classes

Copy Behavior in Array

var a = [1, 2, 3]var b = a

a[0] = 10

a // [10,2,3]b // [10,2,3]

a += 4

a // [10,2,3,4]b // [10,2,3]

Page 22: Hello Swift Final 5/5 - Structures and Classes

Unshare() in Array

var a = [1, 2, 3]var b = a

a.unshare()a[0] = 10

a // [10,2,3]b // [1,2,3]

Page 23: Hello Swift Final 5/5 - Structures and Classes

Compare two Array

var a = [1, 2, 3]var b = a

a.unshare()a[0] = 10

a // [10,2,3]b // [1,2,3]

Page 24: Hello Swift Final 5/5 - Structures and Classes

@lazy syntax

class DataImporter { var fileName = "data.txt"}

class DataManager { @lazy var importer = DataImporter() var data = String[]()}

let manager = DataManager()manager.data += "Some data"manager.data += "Some more data"

manager // importer is nilmanager.importer // Now, importer is not nil

Page 25: Hello Swift Final 5/5 - Structures and Classes

Properies

struct People { var hasClass : Bool = false var isStudent : Bool { get{ return hasClass } set(student) { hasClass = student } }}

var codyInstance = People()codyInstance.isStudentcodyInstance.isStudent = true

Page 26: Hello Swift Final 5/5 - Structures and Classes

Shorthand Setter DeclarationProperies

struct People { var hasClass : Bool = false var isStudent : Bool { get{ return hasClass } set { hasClass = newValue } }}

var codyInstance = People()codyInstance.isStudentcodyInstance.isStudent = true

Page 27: Hello Swift Final 5/5 - Structures and Classes

Read-Only Properies

struct People { var hasClass : Bool = false var isStudent : Bool { return hasClass }}

var codyInstance = People()codyInstance.isStudentcodyInstance.isStudent = trueCannot assign to 'isStudent' in 'codyInstance'

Page 28: Hello Swift Final 5/5 - Structures and Classes

Property Observers

struct People { var hasClass : Bool = false var isStudent : Bool = false { willSet { "will change" } didSet { "already changed" } }}

var codyInstance = People()codyInstance.isStudent = true

Page 29: Hello Swift Final 5/5 - Structures and Classes

Global and Local

// 지금까지 살펴본 내용은 글로벌 변수나, 로컬 변수 모두 적용이 가능합니다.

Page 30: Hello Swift Final 5/5 - Structures and Classes

Type Property

enum SomeEnum { static var typeValue : Int { return 100 }}SomeEnum.typeValuestruct SomeStructure { static var typeValue : Int { return 100 }}SomeStructure.typeValueclass SomeClass { static var typeValue : Int { return 100 }}SomeClass.typeValueStatic properties are only allowed within structs and enums; use 'class' to declar...

Page 31: Hello Swift Final 5/5 - Structures and Classes

Type Property

enum SomeEnum { static var typeValue : Int { return 100 }}SomeEnum.typeValuestruct SomeStructure { static var typeValue : Int { return 100 }}SomeStructure.typeValueclass SomeClass { class var typeValue : Int { return 100 }}SomeClass.typeValue

Page 32: Hello Swift Final 5/5 - Structures and Classes

Methods

class Counter { var count = 0 func increment() { count++ }}

var myCounter = Counter();myCounter.increment() // 1myCounter.increment() // 2myCounter.increment() // 3

Page 33: Hello Swift Final 5/5 - Structures and Classes

Local and External Parameter Names

class Counter { var count = 0 func increment(number:Int,numberTimes:Int) { count += number*numberTimes }}

var myCounter = Counter();

myCounter.increment(10,numberTimes:20)

Page 34: Hello Swift Final 5/5 - Structures and Classes

Local and External Parameter Names

class Counter { var count = 0 func increment(number:Int,#numberTimes:Int) { count += number*numberTimes }}

var myCounter = Counter();

myCounter.increment(10,numberTimes:20)

Page 35: Hello Swift Final 5/5 - Structures and Classes

The “self” Property

class Counter { var count = 0 func increment(number:Int,numberTimes:Int) { self.count += number*numberTimes }}

var myCounter = Counter();

myCounter.increment(10,numberTimes:20)

Page 36: Hello Swift Final 5/5 - Structures and Classes

Mutating Method

class Counter { var count = 0 func increment(number:Int,numberTimes:Int) { self.count += number*numberTimes }}

var myCounter = Counter();

myCounter.increment(10,numberTimes:20)

Page 37: Hello Swift Final 5/5 - Structures and Classes

Subscripts

class Counter { var count = 0 func increment() { self.count++ } subscript(index:Int)->Int { return count*index }}

var myCounter = Counter();myCounter.increment() // 1myCounter[10] // 1*10==10

Page 38: Hello Swift Final 5/5 - Structures and Classes

Subscripts

class Counter { var count = 0 func increment() { self.count++ } subscript(index1:Int, index2:Int)->Int { return count*index1*index2 }}

var myCounter = Counter();myCounter.increment() // 1myCounter[10,10] // 1*10*10==100

Page 39: Hello Swift Final 5/5 - Structures and Classes

Inheritance : Implements Base Class

class Vehicle { var numberOfWheels: Int func description() -> String { return "\(numberOfWheels) wheels; up to" } init() { numberOfWheels = 0 }}

Page 40: Hello Swift Final 5/5 - Structures and Classes

Inheritance : Subclassing

class SomeClass : SomeSuperClass { }

Page 41: Hello Swift Final 5/5 - Structures and Classes

Inheritance : Subclassing

class Vehicle { var numberOfWheels: Int func description() -> String { return "\(numberOfWheels) wheels; up to" } init() { numberOfWheels = 0 }}

class Bicycle : Vehicle { init() { super.init() numberOfWheels = 2 }}

Page 42: Hello Swift Final 5/5 - Structures and Classes

Inheritance : Overriding

class Vehicle { var numberOfWheels: Int func description() -> String { return "\(numberOfWheels) wheels; up to" } init() { numberOfWheels = 0 }}

class Bicycle : Vehicle { override func description() -> String { return super.description()+" 헬맷착용 생활하!" } init() { super.init() numberOfWheels = 2 }}

Page 43: Hello Swift Final 5/5 - Structures and Classes

Inheritance : Override Property

class Bicycle : Vehicle { override var numberOfWheels: Int { get { return super.numberOfWheels } set { super.numberOfWheels = min(newValue, 0) } } override func description() -> String { return super.description()+" 헬맷착용 생활하!" } init() { super.init() numberOfWheels = 2 }}

Page 44: Hello Swift Final 5/5 - Structures and Classes

Inheritance : Preventing Overrides

class Vehicle { @final var numberOfWheels: Int func description() -> String { return "\(numberOfWheels) wheels; up to" } init() { numberOfWheels = 0 }}

Page 45: Hello Swift Final 5/5 - Structures and Classes

Initializer and Deinitializer

class Player { var coinsInPurse: Int init(coins: Int) { coinsInPurse = coins } func winCoins(coins: Int) { coinsInPurse += coins } deinit { coinsInPurse = 0 }}

Page 46: Hello Swift Final 5/5 - Structures and Classes

감사합니다.

let writer = ["Cody":"Yun"]

Could not find an overload for '==' that accepts the supplied arguments