반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Xcode
- 계산기만들기
- 플러터
- URLSession
- strikeThrough
- Flutter
- 메모장만들기
- userdefaults
- DART
- todolist
- Wil
- attributedText
- 내배캠
- Swift
- 커맨드라인툴
- ListTile
- 앱개발
- 스파르타코딩클럽
- 코드스니펫
- UISlider
- pull down button
- 개발자
- ios
- 내일배움캠프
- Storyboard
- 날짜처리
- 오토레이아웃
- 알고리즘
- pop up button
- Storyboard Reference
Archives
- Today
- Total
이리메라 갖다가
[Swift] 클로저(Closure), enumerated() 본문
728x90
반응형
1. 클로저(Closure)
이름이 없는 함수
풀어서 설명하자면, 코드 안에서 전달되어 사용할 수 있는 로직을 말하며 중괄호 {}로 표현된다.
{ (매개변수 이름 : 매개변수 타입) -> 반환타입 in
클로저 표현식 코드
}
예를 들면 좀 더 이해가 쉽다.
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
var reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in
return s1 > s2
})
print(reversedNames)
names를 정렬하는데 어떤식으로 정렬하냐면, s1이 s2보다 큰 경우일 때만 값을 반환한다.
* -> Bool : 반환할 값이 Bool 이어야 한다는 말!
위와 같은 값은 다른 방식으로도 축약해서 구현할 수 있다.
var reversedNames = names.sorted(by: { $0 > $1 } )
print(reversedNames)
* $0 > $1 : 내림차순
클로저를 활용하지 않고 연산자만을 이용해서 정렬하는 방법도 있다.
var reversedNames = names.sorted(by: >)
print(reversedNames)
상기 세 코드는 모두 names라는 배열을 내림차순하는 방식이며 최종 값은 아래와 같이 나온다.
["Ewa", "Daniella", "Chris", "Barry", "Alex"]
2. 후행클로저
함수에 대한 마지막 매개변수가 클로저인 경우에 사용되며, 가독성이 좋다.
// 후행 클로저 예시 (map)
let digitNames = [
0: "Zero", 1: "One", 2: "Two", 3: "Three", 4: "Four",
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"
]
let numbers = [16, 58, 510]
let strings = numbers.map { (number) -> String in
var number = number
var output = ""
while number > 0 {
output = digitNames[number % 10]! + output
number /= 10
}
return output
}
print(strings)
// 출력값: ["OneSix", "FiveEight", "FiveOneZero"]
* map 뒤에 괄호 생략이 가능하다.
** (number) -> String : number를 String으로 변환하겠다.
3. enumerated()
배열의 각 요소와 해당 요소의 인덱스를 쌍으로 반환하는 반복자(iterator)를 생성한다.
class Movie {
var title = ["엘리멘탈", "바비", "명탐정코난", "인시디어스", "미션임파서블 7"]
func movieList() {
for (index, movieTitle) in title.enumerated() {
print("(\(index + 1)) \(movieTitle)")
}
}
}
4. 알고리즘 세션
알고리즘과 관련된 코딩테스트는 매일 5문제씩 풀어보는게 좋을 것 같다.
문법을 소홀히해서는 안되고, 가장 중요한게 문법이라는 것을 잊으면 안된다.
그리고 알고리즘 문제를 마주할 때는 문제 정의가 가장 기본으로 수행이 되어야 하며, 최대한 간결하고 효율적으로 해결할 수 있는 방안을 고려해야한다.
같은 문제라도 답안 코드는 모두 다르기때문에 문제를 풀 때 한가지 방법만 생각하지 않고, 여러 답안을 작성해보는 습관을 가져야 한다.
728x90
반응형
'TIL' 카테고리의 다른 글
[Swift] Command Line Tool로 키오스크 만들기(1) : 기획, 정규식(유효성 검사) (0) | 2023.07.26 |
---|---|
[Swift] 알고리즘 문제 - 몫 구하기, 배열 뒤집기, 문자열 뒤집기 (0) | 2023.07.25 |
[Swift] 호텔 객실 예약 프로그래밍(2) : date, 날짜 다루기 (0) | 2023.07.21 |
[Swift] 호텔 객실 예약 프로그래밍(1) : Array, sorted(), 랜덤값 추출 (0) | 2023.07.20 |
[Swift] 나만의 계산기 만들기(2) : 나머지 연산자, 소수점 처리 (0) | 2023.07.19 |