일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- Timer
- 클로저의 캡슐화
- weatherKit
- Startign Assignments
- CoreLocation
- AnyObject
- WeatherManager
- xcode로 날씨앱 만들기
- RunningTimer
- MKMapItem
- UIAlertAction
- swift
- dispatchsource
- App Store Connect
- SwiftUI Boolean 값
- font book
- Protocol
- 단일 책임원칙
- addannotation
- Xcode
- Required Reason API
- 서체관리자
- 영문 개인정보처리방침
- 한국어 개인정보처리방침
- MKMapViewDelegate
- UICollectionViewFlowLayout
- 러닝타이머
- weak var
- CLLocationManagerDelegate
- 러닝기록앱
Archives
- Today
- Total
VesselWheel
정수 내림차순으로 배치하기 본문
// Int64 타입의 매개변수 n을 받아서,
func solution(_ n:Int64) -> Int64 {
//정수 n을 String으로 변환 후 내람차순으로 sorted(by: >) 정렬한 후 정렬된 문자열(String)으로 정렬 한 후 이를 Int값으로 가장 높은 숫자에서 낮은 숫자 순으로 재정렬
return Int64(String(String(n).sorted(by: >)))!
// 재정렬된 문자열을 Int64 숫자로 변환하며 함수 내부값 강제해제(!)
}
solution(3252) // 결과값 5322
/* 문법 Tip 옵셔널 강제해제 !
옵셔널을 강제 해제하는 방법은 옵셔널 타입의 값 뒤에 "!"만 붙여주면 됩니다. 이 "!"를 강제 해제 연산자라고 합니다.
var optInt: Int? = 3
print("옵셔널 자체의 값 : \(optInt)") // 옵셔널 자체의 값 : Optional(3)
print("!로 강제 해제한 값 : \(optInt!)") // !로 강제해제한 값 : 3
이처럼 옵셔널 자체의 값은 Optional()로 감싸지고, 값이 있을 때 강제 해제를 하면 내부의 값이 추출됩니다.
Int("123")! + Int("123")! // 246
Int("123")! + 30 // 153
이렇게 옵셔널을 해제하여 연산이 가능합니다. 하지만 nil일 때 "!"을 사용하면 오류가 발생합니다. 즉 강제 해제 연산자를 사용할 때는 옵셔널 값이 nil인지 체크가 필요합니다. nil이 아닐 때만 강제 추출해야 합니다.
var str = "123"
var intFromStr = Int(str)
if intFromStr != nil {
print("변환된 값은 \(intFromStr!)입니다")
} else {
print("값 변환에 실패하였습니다")
}
"123"은 Int 타입으로 변환이 가능하므로 intFromStr에는 Optional(123)이 담겨 있습니다. 즉 if 조건절에서 nil이 아니므로 if 구문이 실행됩니다.
변환된 값은 123입니다
만약 숫자 변환 불가능한 값이 들어가면 어떻게 될까요?
var str = "Swift"
var intFromStr = Int(str)
if intFromStr != nil {
print("변환된 값은 \(intFromStr!)입니다")
} else {
print("값 변환에 실패하였습니다")
}
입력된 문자열은 숫자로 변환 불가능하므로 intFromStr에는 nil이 담겨 있습니다. if 조건절이 거짓이므로 else 구문이 실행됩니다.
값 변환에 실패하였습니다
위 조건절에서 intFromStr과 nil 사이에 "!=" 연산자 앞뒤로 공백이 있는 것을 알 수 있습니다. 이것은 가독성을 위한 것이 아닙니다. 문법 오류를 방지하기 위한 목적입니다. 만약 공백을 두지 않으면 두 가지 경우로 해석 가능합니다.
intFromStr!=nil
// 해석1
(intFromStr)!=(nil)
// 해석2
(intFromStr!)=nil
해석1은 원래 의도대로 intFromStr 변수와 nil의 비교입니다. 해석2는 intFromStr 변수의 옵셔널 강제 해제 + nil 값의 할당입니다. 즉 해석의 차이가 발생하여 구문이 모호해질 수 있습니다. 컴파일러는 이를 확실하게 해석하지 못해 오류가 발생합니다. 따라서 공백을 주어야 합니다.
*/
'Coding Test Practice in Swift' 카테고리의 다른 글
콜라츠 추측 (0) | 2023.11.22 |
---|---|
두 정수 사이의 합 with reduce 함수 (1) | 2023.11.21 |
정수 제곱근 판별 (0) | 2023.11.21 |
자연수 뒤집어 배열로 만들기 (1) | 2023.11.14 |
x만큼 간격이 있는 n개의 숫자 (0) | 2023.11.14 |