본문 바로가기

교육

(93)
[swift] exception 1. 예외try : 예외가 발생할 수 있는 함수 앞에 적음do : 예외 발생 구간을 묶는 함수catch : 해당 예외문이 나왔을 때 처리함throw : 예외 가능성이 있을 때 명시 2. 샘플 코드// 예외를 던질 때 사용할 enum 상수// 아무것도 없지만 is ErrorType으로 검사할 수 있으니 좋은 구현?enum FileSendError : ErrorType{ case NoConnection case FileNotFound}func sendFile( a : Int) throws ->Bool // 예외 가능성이 있으면 throws를 명시{ // print("s") // return true // 리턴해버리면 defer 안불림 defer // throw발생해서 종료되었을 때 실행, 예외가 안나왔을때도..
[swift] generic 1. generic c++의 템플릿 개념2가지 방식으로 존재c++ : 스위프트와 같은 방식, 함수 여러개 만들어야 한다. java : 객체 생성, 함수는 1개로 가능, 성능저하가 있다. 2. 샘플코드/* func swap(inout a : Int, inout _ b : Int ) { let temp = a a = b b = temp } */// 1. 기본 모양 (T하나만 있으면 같은 타입을 넘겨야함)func Swap(inout a : T, inout _ b : T ){ let temp = a a = b b = temp}var x = "st"var y = "gs"Swap(&x,&y) // 실제 주소를 보내는건 아니다. inout 방식이면 &를 붙인다. 20, 10으로 바뀜 print(x,y) // 2. G..
[swift] operator overloading 1. operator overloading연산자를 재 정의해서 새로운 동작을 만드는 것 2. 샘플 코드class Point : CustomStringConvertible{ var x : Int = 0 var y : Int = 0 var description: String { get{ // CustomStringConvertible에 정의 되어 있음 return "\(x), \(y)" } } init(_ a:Int = 0, _ b:Int = 0){x=a;y=b}}// 연산자 재정의 함수는 멤버가 아닌 일반 함수로만 가능// 연산자 이름이 함수 이름func +( p1:Point, p2:Point)->Point{ return Point(p1.x+p2.x,p1.y+p2.y)}var p1 = Point(1,2)v..
[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..