본문 바로가기

교육/Swift

(30)
[swift] protocol 1. protocolobjc와 같이 대표적으로 쓰는것이 delegate다른 객체에게 특정 시점을 알려줄 수 있다. 2. 샘플코드// protocolprotocol TestProtocol{ // 규칙 1. 메소드는 선언만 func description() -> String // 규칙 2. 저장속성은 넣을 수 없지만, 계산 속성은 가능 // get/set 반드시 표기 var name : String{get set} // 규칙 3. 연관 타입도 넣을 수 있다. // associatedtype valueType;} class Test : TestProtocol // , TestProtocol2{ func description() -> String { return "AA" } var name : String{ g..
[swift] casting 1. 샘플코드// castingclass Animal{}class Dog:Animal{} class Cat:Animal{ func cry() { print("cat cry")}}var p : Animal = Cat() // p가 누구인지 조사하기print(p is Dog)print(p is Cat)print(p is Animal)// 항상 true라고 warning //p.cry() // Animal에 없기 때문에 런타임에러 //var p2 = p as! Cat // 강제 형변환//var p2 = p as! Dog // 뒤짐, optional로 받자// as! : 잘못된 타입으로 캐스팅 하면 runtime errorvar p2 = p as? Dog // optional// as? : optional 타입..
[swift] extension 1. extensionobjc의 cartegory 2. 샘플코드class Car{ func go(){print("car go")} init(){print("car init")}}var c = Car()c.go() // 기존 클래스에 멤버 추가하기extension Car{ // 메소드 추가 가능 func stop(){print("car stop")} // 지정생성자(일반 생성자) 추가 불가능 편의 생성자는 가능 // init(speed:Int){super.init()} // 편의 생성자 만들때는 반드시 지정 생성자(일반 생성자)를 호출해야 한다. convenience init(speed:Int){self.init()} // 소멸자 deinit{}도 만들수 없다. // 저장속성 안됌. 계산 속성(함수)은 추..
[swift] subscript 1. subscript객체를 배열처럼 보이게 함, c#의 Indexer, c++ [] 재정의 2. 샘플코드 // subscript 객체를 배열처럼 보이게 하는 문법, c#의 Indexer, c++ []재정의class Vector{ var buffer : Array = [] // subscript(idx : Int)->{get{} set{}} subscript(idx : Int)->Int { get{ return buffer[idx] } set{ buffer.append(newValue) } } subscript(idx : String)->String { get{ return "AA" } } subscript(idx : Int,idx2 : Int)->(Int,Int) { get{ return (buffer..
[swift] method 1. methodclass method : 일반 멤버 함수, class 변수를 초기화 한 후에 사용가능static method : 정적 함수, class 이름만으로 사용가능2. 샘플코드 // method : 멤버 함수class People{ var name : String = "" var age : Int = 0 func set(name : String, age : Int = 10) { print("People set") self.name = name self.age = age } static func foo(){print("foo")}}People.foo() // type method 호출 (정적 메소드) class Student : People{ override func set(name : Strin..
[swift] property 1. Stored Property 저장 속성, 일반 멤버 data, 지연된 저장 속성 - var 변수만 가능, let은 초기화를 해줘야함 2. calculation property 계산 속성, getter/setter, 메모리에 변수를 만드는 것이 아니라 함수를 만드는 개념, 단, 사용자 입장에서는 변수처럼 보임 3. Type property 형식 속성, 정적 멤버 데이터 4. Property ObserverKVO문법과 유사함 5. 샘플코드 class Point{ var x : Int = 0 var y : Int = 0 init() {print("point init")}}// 저장 속성(Stored Property) : 일반 멤버 data, 지연된 저장 속성 - var 변수만 가능, let은 초기화를 해..
[swift] init 1. init모든 멤버가 반드시 초기화 되어야 함변수 선언 옆에 하던지, 초기화 함수를 만들던지 꼭 해야 에러가 안남 2. 샘플 코드class Point{ // var x : Int = 0 var x : Int var y : Int // init() // 생성자 // { // x=0 // y=0 // } init(_ x : Int,_ y : Int) // 생성자 { self.x=x self.y=y } // 편의 생성자 : 하나의 생성자에서 다른 생성자를 호출하고 싶을 때 사용 convenience init(){self.init(0,0)} // 실패 가능 생성자(failable constructor init?(s:String) { x=0 y=0 return nil }}var pt = Point()//var..
[swift] 구조체와 클래스 1. 구조체값타입 2. 클래스참조타입, 상속가능, 소멸자 가능, reflection등으로 동적 타입 검사 가능 3. 샘플 코드// 구조체는 무조건 stack, 값 대입struct SPoint{ var x : Int = 0 var y : Int = 0} // class는 무조건 heap, 객체가 heap에 있고 cp1이 가리킴class CPoint{ var x : Int = 0 var y : Int = 0}var sp1 = SPoint()var sp2 = sp1 // 값 복사 sp1.x = 10 // sp1만 바뀜 print(sp1.x, sp2.x) var cp1 = CPoint()var cp2 = cp1 // 참조 복사 cp1.x = 10 // cp2도 같이 바뀜 print(cp1.x, cp2.x) va..