swift
-
swift - String interpolation, Format Specifier, Escape Sequenceswift 2021. 1. 6. 17:09
String interpolation // 문자열을 동적으로 처리 var str = "12.34KB" let size = 12.34 // 두 값의 자료형이 일치하지 않아서 에러 // str = size + "KB" // 이렇게하면 되긴 하는데 거의 이렇게 하지 않고 String Interpolation 사용 str = String(size) + "KB" // String Interpolation str = "\(size)KB" // 그러나 단점 // 직관적으로 확인할 수 있지만 자료형을 직접 명시해서 지정할 수 없음 Format Specifier // 원하는 자료형을 직접지정하고 싶다면 다음 방법 사용 // %.1 -> 포맷 지정자 // 소수점 한자리 수 까지 표현하는 것 str = String(form..
-
swift - Raw Stringswift 2021. 1. 6. 16:49
Raw String var str = "\"Hello \", Swift 5" var rawStr = #""Hello", Swift 5"# str = "Loarem\nInsum" rawStr = #"Lorem\#nIpsum"# rawStr = ###"Lorem\###nIpsum"### let value = 123 str = "The value is \(value)" rawStr = #"The value is \#(value)"# print("==== str ======") print(str) print("====== raw str ========") print(rawStr) var zipCodeRegex = "^\\d{3}-?\\d{3}$" zipCodeRegex = #"^\d{3}-?\d{3}$"# le..
-
swift - Tuplesswift 2021. 1. 5. 19:37
Tuples // 하나의 상수에는 하나의 값만 저장할 수 있음 // Int는 스칼라 타입의 변수 -> 스칼라 타입은 하나의 값만 저장할 수 있음 let i = 12 // 이게 튜플 // 두개 이상의 값 저장 가능 // 튜플은 컴포넌트 타입 // 서로 다른 형식의 값도 저장 가능 let a = (12, 34) // 튜플은 만들고 나서 이후에는 추가, 삭제 불가능 var data = ("", 200, "OK", 12.34) // 하지만 멤버의 값을 바꾸는건 가능 // 주의할건 처음 생성한 자료형을 맞춰줘야 함 data.3 = 12.44 data.3 Named Tulples let data = ("", 200, "ok", 12.34) data.0 let named = (body: "", statusCode: ..
-
swift - Escaping Closureswift 2021. 1. 5. 18:21
Escaping Closure non-escaping closure - 함수 실행이 종료 되기전에 closure가 종료된다. escaping closure - 함수 실행이 종료된 이후에도 실행될 수 있다. // 탈출하는 클로저? // 무엇으로부터 탈출하는지 이해하는게 핵심이다. // 클로저를 파라미터로 받는다. func performNonEscaping(closure: () -> ()) { print("start") closure() print("end") } // 이런 함수 바디에서 호출하고 있는 클로저는 항상 함수실행이 종료되기전에 실행이 완료된다 // 이런게 nonEscaping Closure이다. (함수의 실행을 탈출하지 않는다.) performNonEscaping { print("closure"..
-
swift - Capturing Valuesswift 2021. 1. 5. 18:12
Capturing Values swift는 3개의 Closure가 있는데 세개 다 각각 값을 캡쳐하는 방식이 다르다. Function은 값을 캡쳐하지 않음 Nested Function - 자신을 포함하고 있는 함수 바디에 접근할때 이 값을 캡처 클로저 외부에 있는 값에 접근할때 값을 캡처 값을 캡쳐한다? -> 값을 가져다 쓴다는 의미 var num = 0 // 여기에서 출력하는 num이라는 값은 closure가 캡처한 값 // 캡처? -> 값을 가져와서 쓴다. // 캡처하는 방식 // 1. object-c : 복사본을 캡처 // 2. swift : 참조를 캡처 -> 원본을 그대로 가져온다라고 생각하면된다. // 그래서 swift에서 캡처한 값을 바꾸면 원본도 바뀐다. (object-c 에서는 원본값이 바..
-
swift - Closure Syntax Optimizationswift 2021. 1. 5. 17:59
Closure Syntax Optimization // 문자열 배열중에서 Pro가 포함된 것만 필터링 var proModels = products.filter( { (name: String) -> Bool in return name.contains("Pro") }) // Syntax Optimization // 규칙 // 1. 프레임워크에 구현되어 있는 메소드라면 컴파일러는 프레임워크에 구현되어있는 메소드를 참고해서 추론할 수 있기 때문에 // 파라미터 타입, 리턴형 생략가능 products.filter( { (name) in return name.contains("Pro") }) // 2. 파라미터의 이름은 숏텐더 아규먼트 네임으로 대체한다. -> 이 경우 파라미터 이름과 in 키워드는 생략 하고 숏텐..
-
swift - Closureswift 2021. 1. 5. 17:47
Closure self - contained code blocks 클로저는 비교적 짧고 독립적인 코드 조각 swift 에서 클로저로 분류되는 것은 세가지 함수처럼 first class citizen이다. 특이 1. func 키워드 없음 2. 모든 부분이 { } 안에 포함 3. paramers 부터 returnType까지를 closure head라고 하고, statements가 closure body -> in 키워드로 구분 4. 함수와 마찬가지로 파라미터와 리턴형을 생략할 수 있는데 이 경우 in 키워드도 같이 생략 그래서 가장 간단한 closure는 { statments } 형태 파라미터와 리턴형이 생략된 형태 파라미터와 리턴형이 있는 형태 자료형이 함수와 동일하기 때문에 함수와 호환가능하다 상수를 클..
-
swift - Nested Functionsswift 2021. 1. 5. 17:21
Nested Functions // Nested Function : 포함된 함수 // outer 함수밖에서는 inner함수를 직접 호출 불가능 //func outer() { // func inner() { // print("inner") // } // print("outer") //} outer() // inner() -> 호출불가능 //inner 함수를 어떻게 호출할 수 있을까? // outer 함수는 이제 파라미터도 없고 리턴타입도 없는 void를 리턴하는 형태 func outer() -> () -> () { func inner() { print("inner") } print("outer") return inner } // 리턴된 함수를 통해서 간접적으로 스코프를 확대하는 방법으로 사용가능 let f..