Just 한 개의 값(value) 를 전달합니다. 다른 Publisher와 달리 배열을 just로 전달하면 배열의 각 값을 전달하는 것이 아니라 배열이라는 하나의 값을 통채로 전달합니다 import Foundation import Combine let justPublisher = Just(1000) let justSubscriber = justPublisher.sink { value in print("recived value : \(value)") } /* recived value : 1000 */ .publisher 객체를 Publisher로 만들어 줍니다 한 개의 값이면 한 개의 값을 전달하고 ( Just와 동일 ) 배열 등의 객체면 해당 객체의 값을 순차적으로 전달합니다 import Foundati..
// date fomatter func formattedDateString(dateString: String) -> String { let formatter = DateFormatter() formatter.dateFormat = "yyyy.MM.dd" if let date = formatter.date(from: dateString) { // formatter.dateFormat = "M/d" formatter.dateFormat = "yy.MM.dd" return formatter.string(from: date) } else { return "" } }
// 가격 : 3자리 마다 콤마 찍기 func convertToCurrencyFormat(price: Int) -> String { let numberFormatter = NumberFormatter() numberFormatter.numberStyle = .decimal numberFormatter.maximumFractionDigits = 0 let result = numberFormatter.string(from: NSNumber(value: price))! return result }
익스텐션 기존 타입에 새로운 역할(기능 및 속성)을 추가하고 싶을 때 사용합니다 extension String { func contains(s: String) -> Bool { return self.range(of: s) != nil } func replace(target: String, with: String) -> String { return self.replacingOccurrences(of: target, with: with) } } let testString = "Hello iOS Developer!!" let replaced = testString.replace(target: "Hello", with: "안녕하세요") print(replaced) //안녕하세요 iOS Developer!! pr..
프로토콜 프로토콜은 제공하고 싶은 역할(기능, 속성)을 미리 정의해 놓은 것 이후에 다른 타입이 해당 프로토콜의 역할을 제공하고 싶으면, conform 해서 제공함 자바의 추상클래스와 비슷하다고 생각하면 됩니다 필드의 getter, setter 설정 가능합니다 protocol Coach { var name: String { get set } var currentTeam: String { get } func training() func direct() } struct Mourinho: Coach { var name: String = "Jose Mourinho" var currentTeam: String = "AS Roma" func training() { print("Traing Player") } fun..
구조체 구조체는 사용자가 원하는 데이터 타입을 만들 때 사용합니다 struct 키워드를 이용해서 선언합니다 구조체 내부 멤버 변수의 값을 변경하는 경우, mutating 키워드 이용합니다 struct Album { // 멤버 변수들 // stored property let title: String let artist: String var isReleased = false func description() -> String { return "\(title) by \(artist)" } // 구조체 내부 멤버 변수의 값을 변경하는 경우, mutating 키워드 이용 mutating func release() { self.isReleased = true } } var easyOnMe = Album(title:..
함수 함수는 func 키워드를 사용해서 선언합니다 () 안에 인자를 받을 수 있게 만들 수 있습니다 반환되는 값이 있는 경우, -> 을 이용해서 반환 타입을 선언합니다. func printGugu(dan: Int) { for i in 1...9 { print("\(dan) * \(i) = \(dan * i)") } } printGugu(dan: 5) // printGugu(5) // 인자는 반드시 특정해야 함 // 5 * 1 = 5 // 5 * 2 = 10 // 5 * 3 = 15 // 5 * 4 = 20 // 5 * 5 = 25 // 5 * 6 = 30 // 5 * 7 = 35 // 5 * 8 = 40 // 5 * 9 = 45 func rollDice() -> Int { return Int.random..
nil 값이 존재하지 않는 경우 nil 로 변환됩니다. import UIKit // Dictionary (Key: Value) let languageCode = [ "한국" : "ko", "미국" : "en", "일본" : "ja", ] let krCode = languageCode["한국"] // "ko" let jpCode = languageCode["일본"] // "ja" let deCode = languageCode["독일"] // nil '?' 를 통해 값이 없을 수 있다는 것을 명시해줍니다. import UIKit // 이름이 있을수도 있고 없을수 있는 타입 선언 => String? var name: String? = nil name = "Jason" name = nil
for 반복 횟수를 알 때 사용 배열과 딕셔너리 아이템을 순차적으로 체크할 수 있습니다 배열 : 값 딕셔너리 : (키, 값) import UIKit let ages = [3, 20, 60] let languageCode = [ "한국" : "ko", "미국" : "en", "일본" : "ja", ] for age in ages { print("age: \(age)") } // age: 3 // age: 20 // age: 60 for (key, value) in languageCode { print("\(key)의 언어코드는 \(value)") } // 한국의 언어코드는 ko // 미국의 언어코드는 en // 일본의 언어코드는 ja 단순히 횟수만 반복하는 경우 반복되는 인자(i) 를 사용하지 않는 경우 ..
if ~ else if ~ else ~ 조건은 괄호 없이 작성 가능합니다 2개 이상 조건을 작성하는 경우 &&, || 을 사용합니다 import UIKit let age = 30 // if 문의 조건절에는 boolean 타입을 사용합니다. // 예) age > 20 if age > 20 { print("성인 입니다") } else { print("미성년 입니다") } // else-if 조건을 이용해서, 조건을 세분화 해보겠습니다. if age >= 10 && age = 20 && age = 30 && age < 40 { print("30대 입니다") } else i..
기본 열거형 예시 코드에서 볼 수 있듯이 WeekDay (주간) 에 대한 데이터에서 월(mon) ~ 금(fri) 의 데이터만 존재해야 하는 경우 이를 문자열로 구현하는 경우 mom 이라는 오타 발샐 시 스위프트 문법 상 문제는 없기 때문에 어느 부분에서 문제가 발생했는지 찾기 어렵습니다. 그러한 문제를 방지하기 위해 Enum(열거형)을 사용합니다. import UIKit // 요일을 한번 enum으로 만들어 보겠습니다. enum WeekDay { case mon case tue case wed case thu case fri } var today: WeekDay = .mon // mon // var today2: String = "mom" // "mom" // mon 과 다르지만 오류는 발생하지 않음 /..
배열 Data 들이 연속적으로 저장된 리스트 입니다. 배열 형식으로 변수/상수 에 대입하면 배열이 생성되며 자동으로 자료형이 결정됩니다 빈 배열 생성 방법 var 배열명: [자료형] = [] import UIKit /* Array */ let ages = [3, 20, 60] // [3, 20, 60] let colors = ["green", "red", "yellow"] // ["green", "red", "yellow"] // 빈 배열 var emptyArr: [Int] = [] // [] 딕셔너리 키와 값의 Pair 들이 연속적으로 저장된 리스트입니다 딕셔너리 형식으로 변수/상수 에 대입하면 딕셔너리가 생성되며 자동으로 키, 값의 자료형이 결정됩니다 빈 딕셔너리 생성 방법 var 딕셔너리명: [키 ..