Logseq/pages/Swift.md
2026-01-09 18:58:13 +09:00

136 lines
5.7 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

deck:: Logseq/coding tip
- ## **► 배열 선언 및 초기화**
- ### **◼︎ 1차원 배열**
- #### **● 1부터 10까지를 요소로 가지는 배열 생성하기(2가지 방법)** #card
id:: 691ed199-9a79-4333-9bb2-7795990e158e
- ```swift
var arr = Array(1...N)
var arr = (1...N).map{$0}
```
- #### **● 모든 요소가 0인 길이 10의 배열 생성하기** #card
id:: 691ed271-962d-434b-9850-a7e3220421a5
- ```swift
var arr = Array(repeating: 0, count: 10)
```
- ### **◼︎ 2차원 배열**
- #### **● 모든 요소가 0인 N*M 크기의 배열 생성** #card
id:: 5ff9dc64-e39e-45a5-8c66-222619db3651
- ```swift
var arr = Array(repeating: Array(repeating: 0, count: M), count: N)
```
- #### **● N*M 크기의 2차원 배열의 각 요소가 현 요소의 행과 열을 가지는 튜플이 되도록(1-base index)** #card
id:: f91d7c74-dd80-40c2-9a15-d9f5a0eeb61b
- ```swift
var arr = (1...N).map{ row in
(1...M).map{ col in
(row, col)
}
}
```
-
- ## **► 비 고차 내장함수 모음**
- ### **◼︎ stride()**
- **정의**
- 일정한 간격으로 숫자 {{c1 시퀀스}}를 생성하는 함수.
extra:: python의 range와 비슷함.
id:: 6960b576-ad59-4da0-bd9b-cdc8a293e99e
- **파라미터**
- stride의 파라미터는 {{c1 from}}, {{c1 to}}, {{c1 through}}, {{c1 by}} 이다.
extra:: (from, to, by) 혹은 (from, through, by) 조합으로 쓰인다.
id:: 6960b5b7-4154-4ed8-adc1-1f1d8d5b70d2
- 파라미터 타입은 정수형(Int, Int8, UInt 등등)뿐 아니라 {{c1 실수형(Double, Float)}}도 가능하다.
id:: 6960b6dc-ce22-47fb-9d7c-2615053e8abd
- stride(from: **a**, to: **b**, by: **c**) 의 의미는?
id:: 6960b6af-74bd-43cc-9124-eb59c73027d2
:-> a부터 시작해서 b까지 c 간격으로 시퀀스를 생성함(이때 b는 포함되지 않음)
- stride(from: **a**, through: **b**, by: **c**) 의 의미는?
id:: 6960b79d-7044-4c17-953e-8e2eac6470f9
:-> a부터 시작해서 b까지 c 간격으로 시퀀스를 생성함(이때 b도 포함됨.)
- **예제코드**
- 0부터 1 사이를 0.1간격으로 나눈 배열을 생성하라.(0은 포함하지 않는다) #card
id:: 6960b85a-b8e7-4a8b-a5b6-e5087647bfc7
- ```swift
var arr = stride(from:1.0, to: 0.0, by: -0.1).map{$0}
var arr = Array(stride(from:1.0, to: 0.0, by: -0.1))
```
- 0부터 20까지 4의 간격으로 포함하는 배열을 생성하라(20은 포함된다) #card
id:: 6960b921-ae3e-4a8a-9430-2d56ec243992
- ```swift
var arr = stride(from:0, through: 20, by: 4).map{$0}
var arr = Array(stride(from:0, through: 20, by: 4))
```
-
- ## **► 고차함수 모음**
- ### **◼︎ .map()**
- #### **정의** #card
id:: 691edbcd-37ca-425c-85bb-f5ea0a45269d
- 컨테이너(배열 등) 내부의 모든 요소에 대해 지정된 클로저(함수)를 실행하고, 그 결과를 모아 새로운 배열로 반환하는 고차함수.
- 원본 배열을 수정하지 않는다.
- #### **문법구조** #card
id:: 691edc68-64c5-4d4a-a2c1-1f67dbf503e1
- ```swift
let result = numbers.map { number in
return number * 2
}
// 기본적으로 클로저를 입력받아서 실행됨.
// in 앞에는 컨테이너의 각 값을 의미하는 매개변수 명
// in 뒤에는 실행할 함수를 작성함.
let result = numbers.map { $0 * 2 }
// 클로저 문법에 따라 입력 변수를 그냥 $0, $1 형태로 해서 바로 사용하는 것도 가능함
```
-
- ## **► 클로저(Closure)**
- ### **◼︎ 정의** #card
id:: 69203197-090a-42f4-9a92-16efb9516eca
- swift에서 사용되는 익명함수 기능을 통칭하는 용어
- 일급 객체로서 변수/상수에 저장도 가능하고 함수의 파라미터로 전달하거나 리턴값으로 사용 가능.
- ### **◼︎ 문법**
- **● 기본문법** #card
id:: 6920321b-21c3-4661-a415-debd1460f764
- ```swift
// 기본 형태
{(매개변수) -> 반환타입 in 실행구문}
// 변수 대입
let sum_nums = {(a: Int, b: Int) -> Int in return a+b}
```
- **● 문법최적화(sorted 함수를 기준으로 단계별로 최적화 되는 것을 설명)** #card
id:: 69203294-17a2-4c7e-a0af-e3811397d73b
- ```swift
// 0. 전체 문법
let sorted0 = nums.sorted(by: {(a: Int, b: Int) -> Bool in
return a < b
})
// 1. 타입유추
// 파라미터의 타입을 추정할 수 있다면 생략이 가능하다
let sorted1 = nums.sorted(by: {(a, b) in
return a < b
})
// 2. 암시적 변환
// 클로저 내부의 코드가 단 한줄이면 return 키워드를 생략 가능
let sorted2 = nums.sorted(by: {(a, b) in
a < b
})
// 3. 단축 인자 이름
// 매개변수도 생략하고 첫번째 인자는 $0, 두번째 인자는 $1 로 해서 사용가능
let sorted3 = nums.sorted(by: {
$0 < $1
})
// 4. 후행클로저
// 함수의 매개변수 중 클로저가 1개이고 가장 마지막으로 들어가는 인자일 경우
// 클로저 자체의 중괄호를 소괄호 밖으로 뺄 수 있음
// 고차함수의 인자가 클로저 1개 뿐일 경우에는
// 소괄호 자체도 생략해서 클로저만 붙이는것도 가능
let sorted4_1 = nums.sorted(){$0 < $1}
let sorted4_2 = nums.sorted{$0 < $1}
// 참고사항
// 연산자는 (<, >) 그 자체로 이미 클로저이기에 바로 넘길 수 있음
let sorted5 = nums.sorted(by: <)
```