본문 바로가기

Swift15

Swift Closure (일급객체 함수) Function Type 1st class citizen 함수는 1등 시민 함수는 어디든 갈 수 있다. 함수는 다른 함수의 매개변수가 될 수 있다. 함수가 함수를 리턴할 수 있다. 함수를 변수에 할당할 수 있다. 함수 타입 () -> Void (Int, Int) -> Int Example 1) 변수에 함수를 할당할 수 있다. /// Apple example code func addTwoInts(a: Int, b: Int) -> Int { return a + b } func multiplyTwoInts(a: Int, b: Int) -> Int { return a * b } var mathFunction:(Int, Int) -> Int = addTwoInts //이 자리는 type 자리인데 함수가 들어갈 수.. 2021. 3. 25.
Swift where syntax SwiftUI에서 재사용 가능한 view 를 만드는 부분에서 이런 문법이 나왔다. struct GridView: View where Content: View { ... where 이 추가적인 조건을 주는건 어렴풋이 알고있는데 저렇게 View where Content : View 로 프로토콜에 쓰이는 건 처음봐서 where 절이 쓰일 수 있는 경우를 정리해본다. where 는 값들을 filter 할 수 있는 강력한 기능이고 다양하게 쓰일 수 있다. Switch 문에서의 사용 enum Action { case createUser(age: Int) case createPost case logout } func printAction(action: Action) { switch action { case .crea.. 2020. 10. 27.
Swift High Order Function Summary 고차함수란 함수를 다루는 함수 하나 이상의 함수를 인자로 받는다. 함수를 결과로 반환한다. Swift 고차함수 종류 Map Filter Reduce CompactMap FlatMap Map 배열 내부의 값을 하나씩 mapping 하는 역할 각 요소에 대한 값을 변경 하고자 할때 사용하고 결과를 배열 상태로 반환 func map(_ transform: (String) throws -> T) rethrows -> [T] 예제 코드 (배열의 값을 2배씩 곱해진 배열을 리턴) var arr : [Int] = [1,2,3,4,5,6,7,8,9,10] //일반적 var doubledArr = arr.map({ (number : Int) -> Int in return number*2 }) //후행클로져 var dou.. 2020. 10. 6.
[DI] Initializer로 Swift 의존성 주입하기 번역글 입니다. [출처] How to Do Swift Dependency Injection With Initializers Dependency Injection feel like a very complicated topic but in fact it is very simple. We as devs all try to follow design principle like… medium.com 의존성 주입은 어렵게 느껴질 수 있는 주제이지만 사실 매우 단순합니다. 개발자로써 SOLID와 같은 디자인 원리를 적용하여 코드가 스파게티 코드가 아닌 적절하게 모듈로 구조화되게 시도합니다. 이때 의존성 주입은 도움이 될 수 있습니다. 또한 코드를 mocking/testing 하는 데에도 도움을 줄 수 있습니다. 의존성.. 2020. 9. 3.
ARC - Automatic Reference Counting ARC 란 Swift 에서 사용하는 메모리 관리 전략이다. reference 숫자를 자동으로 counting 하여 메모리를 관리한다. 객체가 메모리에 할당될 때 reference를 저장하는 객체만 ARC의 영향을 받는다. 그말은 reference type 만 ARC 의 관리를 받는 다는 뜻으로 구조체와 같은 value type은 메모리 관리 대상이 아니다 Reference type으로는 대표적으로 Class 와 Closure이 있다. 자바의 메모리 관리 기술인 Garbage Collector 과 비교하자면 ARC는 컴파일 시간에 동작하고 GC는 런타임에 동작한다는 것이다. ARC가 compile 타임에 동작하기 때문에 개발자는 ARC에게 메모리 leak 에 대비할 수 있도록 많은 힌트를 줘야 한다. re.. 2020. 8. 24.
Swift: 프로퍼티와 메서드 프로퍼티 클래스, 구조체 또는 열거형 등에 관련된 값 저장 프로퍼티: 인스턴스의 변수 또는 상수 (구조체, 클래스에만 사용 가능) 연산 프로퍼티: 특정 연산을 실행한 결괏값 타입 프로퍼티: 특정 타입에 사용되는 프로퍼티 (클래스 변수) - static *프로퍼티 감시자: 프로퍼티 값이 변할 때 값의 변화에 따른 특정 작업 실행 (저장 프로퍼티에 적용가능, 부모 클래스로부터 상속 가능) 지연 저장 프로퍼티 (lazy var) 호출이 있어야 값을 초기화 한다. 인스턴스를 초기화 하면서 굳이 모든 저장 프로퍼티를 사용할 필요가 없을 때 사용한다. 굳이 메서드를 쓰지않고 연산 프로퍼티를 쓰는 이유 인스턴스 외부에서 메서드를 통해 인스턴스 내부 값에 접근하려면 메서드 두개(접근자, 설정자)를 구현해야한다. (코드.. 2020. 7. 13.
Swift: 구조체 vs 클래스 Struct 구조체의 인스턴스는 값 타입 --> 전달될 값이 복사되어 전달된다. 스위프트 기본 타입(Bool, Int, Array, Dictionary, Set, String 등) 구조체로 구현되어 있음 Class 클래스의 인스턴스는 참조 타입 --> 전달될 값이 복사되지 않고 참조(주소)가 전달된다. *같은 곳을 참조하는지 확인을 위해 === 를 사용한다. 공통점 값을 저장하기 위해 property 를 정의 가능 기능 실행을 위해 method 정의 가능 subscript 문법을 통해 구조체 또는 클래스가 갖는 값에 접근하도록 서브스크립트를 정의 가능 초기화 될 때 상태를 지정하기 위한 init 정의 가능 기능 추가를 위한 extension 가능 특정 기능 실행을 위한 프로토콜 준수 가능 차이점 구조체는.. 2020. 7. 13.
Swift enum - 열거형 Enum : 열거형 연관된 항목들을 묶어서 표현 딱 정해진 값만 열거형 값에 속할 수 있음 각 열거형이 고유의 타입으로 인정됨 제한된 선택지를 주고싶을 때 정해진 값 외에는 입력받고 싶지 않을 때 예상된 입력 값이 한정되어 있을 때 enum Apple { case Macbook case MacbookPro case iPad case iPadPro case iPhone11 case iPhone11Pro case appleWatch } var device : Apple = Apple.iPad var device : Apple = .iPad //change value device = .iPadPro enum 은 원시값도 가질 수 있다. enum Apple { case Macbook = "맥북" case Mac.. 2020. 7. 9.
Swift Set Set 같은 타입의 데이터를 순서없이 하나의 묶음으로 저장 선언 var nameSet : Set = [] var nameSet : Set = Set() var nameSet : Set = ["name1","name2","name3"] 값 접근 //Set 크기 nameSet.count //Set 추가 nameSet.insert("name5") //Set 삭제 nameSet.remove("name1") Set 집합연산 let setA : Set = ["a","b","c","d"] let setB : Set = ["c","d","e"] //교집합 let intersectSet : Set = setA.intersection(setB) //여집합 let symmetricDiffSet : Set = setA.sym.. 2020. 7. 9.
Swift 알고리즘에 쓰이는 문법 정리 String 특정 기준으로 나누기 String -> [String] : components var str = "12345678" var arr = str.components(separatedBy : "5") //["1234","678"] String 빈칸 없애기 or 문자 치환 : replacingOccurrences var str = "1 2 3 4 5" let replaced = str.replacingOccurrences(of: " ", with: "") //"12345" String -> [String] : Array var str = "123 45" var arr = Array(str) //["1","2","3"," ","4","5"] [Int] -> [String] : map //digits .. 2020. 7. 7.
Swift String to Array (component) 예제 import Foundation var str = "1234 56789" var arr = str.components(separatedBy: "5") var arr2 = Array(str) print(arr) print(arr2) let replacedStr = str.replacingOccurrences(of: " ", with: "") var arr3 = replacedStr.components(separatedBy: "5") print(arr3) var eq = "1+2-3*4/5" print(eq) var eqArr = eq.components(separatedBy: ["+","-","*","/"]) .map{(value:String) -> Int in return Int(value)! } .. 2020. 7. 3.
Swift 코딩 테스트 준비 - Java to Swift 😱 이번에 하계 인턴을 위한 코테를 칠 예정이다. 오늘 안내 메일을 받았는데 세상에나 Swift 언어만 지원한다고 한다. iOS직군이라 그런것 같으나 언어 제한을 둘 줄은 몰랐다. 평소에 Swift로 슬슬 풀어볼까 생각이 들었었는데 이 참에 Swift로 풀어야 겠다. 🤦‍♂️ 문자열 - 가운데 수 찾기 func solution(_ s:String) -> String { if(s.count%2==0){ let index1 = s.index(s.startIndex, offsetBy: s.count/2-1) let index2 = s.index(s.startIndex, offsetBy: s.count/2) return "\(s[index1])\(s[index2])" }else{ let index1 = s.inde.. 2020. 7. 1.
[🗂 Swift Data Structure] - Stack public struct Stack { private var storage : [Element] = [] public init(){} public init(_ element: [Element]){ storage = element } } extension Stack: CustomStringConvertible{ public var description:String{ """ --top-- \(storage.map{"\($0)"}.reversed().joined(separator: "\n")) ------ """ } public mutating func push(_ element: Element){ storage.append(element) } @discardableResult public mutating f.. 2020. 6. 25.
스위프트 101 - Objects and Classes Class 'class' 뒤에 class 이름을 붙여 class를 만든다. class 의 프로퍼티 선언은 상수나 변수선언과 동일하다. 하지만 프로퍼티들은 해당 classd의 context에 속해진다. 함수도 같은 방법으로 사용하면 된다. Class instance 만들기 클래스 인스턴스를 만드려면 이름 뒤에 괄호를 붙여주면 된다. 또한 class의 프로퍼티에 접근하기 위해선 쩜(.)을 사용하면 된다. var shape = Shape() shape.numberOfSides = 7 var shapeDescription = shape.simpleDescription() 위 코드는 initializer를 빼먹고 있다. initializer는 class 의 instance 가 만들어질 때 초기 설정을 해주는 역할.. 2020. 3. 26.
스위프트 101 - 소개 소개 Swift 언어는 폰, 데스크탑, 서버등 코드가 실행될 수 있는 환경에서 소프트웨어를 fantastic(apple inc 의 주장입니다) 하게 개발할 수 있는 언어이다. Swift의 safe, fast, interative 한 특징들은 현대의 프로그래밍 언어들의 장점들과 오픈 소스 커뮤니티에서 비롯된 Apple의 engineering 문화와 다양성에서 비롯된 거라고 한다. 스위프트는 현대의 프로그래밍 패턴에서 보여지는 공통적인 프로그래밍 에러에 대한 정의를 잘 해놓았다고 한다. [스위프트의 에러 정의] 항상 변수는 사용하기 전에 초기화 한다. Array indice(배열 색인)은 항상 out-of-bounds 에러에 대해 검사된다. Integers(정수) 는 항상 overflow 에러에 대해 검사된.. 2020. 3. 25.