본문 바로가기

swift

(14)
[swift] 고차함수 - 맵 (Map), 필터(Filter) 고차함수 : 매개변수로 함수를 갖는 함수 맵 (Map) 맵은 자신을 호출할 때 매개변수로 전달된 함수를 실행해서, 그 결과를 다시 반환해주는 함수이다. 맵을 사용하면 컨테이너가 담고 있던 각각의 값을 매개변수를 통해 받은 함수에 적용한 후, 다시 컨테이너에 담아 반환한다. 이 때 원본 컨테이너의 값은 변경되지 않고 새로운 컨테이너가 생성되어 반환된다. 그래서 맵은 기존 데이터를 변형하는 데 많이 사용한다. map 메소드와 for-in 구문 // for-in 구문 사용 for n in numbers { doubledNumbers.append(n * 2) strings.append("\(n)") } print(doubledNumbers) // [0, 2, 4, 6, 8] print(strings) // ["..
[swift] sort와 sorted swift에서 배열을 정렬해주는 함수에는 대표적으로 sort, sorted가 있다. sort sort는 원본 배열을 오름차순으로 정렬한다. 그래서 원본 배열을 가지고 있어야 하는 경우 (ex. 하나의 배열을 여러 방식으로 정렬해야 할 경우) 에는 적절하지 않다. // sort() 함수 사용 var arr = [1, 2, 5, 4, 6] arr.sort() print(arr) // [1, 2, 4, 5, 6] 배열의 정렬 기준을 custom 하고 싶다면? sort(by: (Int, Int) throws -> Bool) 함수를 사용하면 된다. // sort(by: (Int, Int) throws -> Bool) 함수 사용 var arr = [1, 2, 5, 4, 6] arr.sort { (a, b) -> B..
[swift] String.Index와 String.SubSequence(Substring) String.Index String.Index 타입은 swift에서 문자열의 index를 나타낸다. c++에서 문자열의 첫번째 문자를 가리키고 싶다면 s[0]과 같은 방식으로 정수를 넣어주면 되지만, swift에서는 String.Index 타입을 넣어주어야 한다. // s = "abc" let start = s.index(after: s.startIndex) let end = s.index(before: s.endIndex) print(String(s[start])) // "b" print(String(s[end])) // "c" startIndex : 문자열의 맨 처음을 가리키는 인덱스 ("abc"에서는 a를 가리킴) endIndex : 문자열의 맨 끝을 가리키는 인덱스 ("abc"에서는 \0를 가리킴..
[swift] 클로저 (closure) 클로저 (closure) 클로저는 실행가능한 코드 블럭을 말한다. (함수도 클로저의 일종) 이름을 정의할 필요가 없고, 매개변수와 리턴 값이 존재한다. (이름이 있는 클로저가 함수!) 일급 객체이다. ➡️ 변수, 상수로 저장, 전달인자로 전달 가능 { (매개변수 목록) -> 반환타입 in 실행 코드 } // 매개 변수가 필요하지 않다면? { () -> 반환타입 in 실행 코드 } // 함수를 사용할 경우 func sumFunction(a: Int, b: Int) -> Int { return a + b } var sumResult: Int = sumFunction(a: 1, b: 2) print(sumResult) // 클로저를 사용할 경우 var sum: (Int, Int) -> Int = { (a: I..
[swift] 값 타입 vs 참조 타입 swift의 Class 단일 상속 가능 (다중 상속 불가) 참조 타입 (데이터를 전달할 때 값의 메모리 위치를 전달한다) Apple 프레임워크의 대부분의 뼈대는 모두 클래스로 구성되어 있다. swift의 struct 다른 언어의 구조체들보다 다양한 기능을 가지고 있다. 상속 불가 값 타입 (데이터를 전달할 때 값을 복사해서 전달) swift의 대부분 큰 뼈대는 모두 구조체로 구성되어 있다. swift의 enum 다른 언어의 열거형과는 다른 존재 상속 불가 값 타입 열거형 자체가 하나의 데이터 타입이다. 열거형의 case 하나하나 전부 하나의 유의미한 값으로 취급한다. 구조체는 언제 사용하나? 연관된 몇몇의 값을 모아서 하나의 데이터 타입으로 표현하고 싶을 때 다른 객체, 함수로 전달되는 상황에서 참조가 ..
[swift] 열거형 (enum) 열거형 (enum) swift의 열거형은 각각의 case가 고유의 값으로 취급이 된다. enum 자체가 하나의 타입이므로, 대문자 카멜케이스로 이름을 정의해야 한다. 각 case는 소문자 카멜케이스를 사용함. 각 case는 한 줄에 한 개, 여러 개 등 마음대로 정의할 수 있다. enum 이름 { case 이름1 case 이름2 case 이름3, 이름4, 이름5 // 한 줄에 여러 개 정의 가능 } // 예제 enum BoostCamp { case iosCamp case androidCamp case webCamp } enum Weekday { case mon case tue case wed case thu, fri, sat, sun } // 열거형 타입과 케이스를 모두 사용하여도 됩니다 var day:..
[swift] 클래스(class) 클래스 (class) 구조체는 값 타입인 반면에, 클래스는 참조 타입이다. swift의 클래스는 다중 상속이 되지 않는다. class Sample { var mutableProperty: Int = 100 // 가변 프로퍼티 let immutableProperty: Int = 100 // 불변 프로퍼티 static var typeProperty: Int = 100 // 타입 프로퍼티 func instanceMethod() { // 인스턴스 메소드 print("instance method") } // 타입 메서드 static func typeMethod() { // 상속시 재정의 불가 타입 메서드 - static print("type method - static") } class func classMeth..
[swift] 구조체 (struct) 구조체 (struct) 스위프트의 대부분의 타입은 구조체로 이루어져 있고, 구조체는 값 타입이다. (함수는 참조 타입!) 프로퍼티 : 타입 안에 들어가는 변수 메소드 : 타입 안에 들어가는 함수 struct Sample { var mutableProperty: Int = 100 // 가변 프로퍼티 let immutableProperty: Int = 100 // 불변 프로퍼티 // 이 두 개는 인스턴스 프로퍼티 static var typeProperty: Int = 100 // 타입 프로퍼티 func instanceMethod() { // 인스턴스 메소드 print("instance method") } static func typeMethod() { // 타입 메소드 print("type method") ..