안녕하세요. iOS 개발자 엔비냥 입니다.
Swift : The Basics 두번째 번역입니다. 오역이 있으면 답글 부탁드립니다
10진수는 prefix 가 없습니다.
2진수는 0b 를 prefix로 사용합니다.
8진수는 0o 를 prefix로 사용합니다.
16진수는 0x 를 prefix로 사용합니다.
let decimalInteger = 17
let binaryInteger = 0b10001 // 17 (2진수)
let octalInteger = 0o21 // 17 (8진수)
let hexadecimalInteger = 0x11 // 17 (16진수)
소숫점 리터럴은 10진수와 16진수로 가능 합니다. 소숫점의 양쪽 사이드에는 10진수 혹은 16진수 숫자가 있어야 합니다. 십진수 소숫점은 대문자 혹은 소문자 e로 지수 표현이 가능합니다.
1.25e2 는 1.25 x 10^2 혹은 125.0 을 의미 합니다.
1.25e-2 는 1.25 x 10^-2 혹은 0.0125 를 의미 합니다.
16진수의 지수 표현은 2^exp 를 기본으로 사용 합니다.
0xFp2 는 15 x 2^2 혹은 60.0 을 의미합니다.
0xFp-2 는 15 x 2^-2 혹은 3.75 를 의미 합니다.
아래에 소숫점 리터럴들은 전부 12.1875를 나타 냅니다.
let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0
숫자 리터럴들은 읽기 쉽기 위해 추가 표현이 가능합니다. 추가적으로 0을 넣거나, underscores (언더바 _) 를 넣을 수 있습니다.
let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
대부분의 integer 상수나 변수들은 음수가 아니라는것을 알면서도 Int 타입을 사용합니다. 하고 있는 작업을 위해 명확하게 필요 할때나, 외부 소스의 명확한 사이즈 데이터 혹은 메모리나 퍼포먼스등을 위해서나 다른 타입의 integer 를 사용하게 됩니다.
Integer 상수나 변수의 숫자 타입에 따라 저장되는 범위가 다릅니다. Int8 상수나 변수는 -128 과 127 사이의 숫자들을 저장할 수 있습니다. UInt8 상수나 변수는 0 하고 255 사이의 숫자들을 저장할 수 있습니다. 상수나 변수에 들어가는 숫자가 범위를 벗어나게 되면 컴파일시 에러가 보고 됩니다.
let cannotBeNegative: UInt8 = -1
// UInt8 는 음수를 저장할 수 없습니다. 그래서 해당 코드는 에러가 나옵니다.
let tooBig: Int8 = Int8.max + 1
// Int8 는 최대 값을 넘어서 저장할 수 없습니다. 그래서 해당 코드는 에러가 나옵니다.
각 숫자 유형은 다른 값 범위를 저장할 수 있기 때문에 상황에 따라 숫자 유형 변환을 선택해야합니다. 이 옵트 인 방식은 숨겨진 변환 오류를 방지하고 코드에서 유형 변환 의도를 명확하게 나타냅니다.
아래 예제에서 상수 twoThousand는 UInt16 유형이고 상수는 UInt8 유형입니다. 같은 유형이 아니기 때문에 직접 추가 할 수 없습니다. 대신이 예제에서는 UInt16 (one)을 호출하여 새로운 Uint16 을 one 을 초기값으로 생성하고, 기존값을 대체 합니다.
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)
SomType(ofInitialValue) 는 Swift 에서 기본적인 초기화 방법 입니다.
정수와 소숫점 사이에 변환 명시적 이어야 합니다.
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi 는 3.14159 와 같고 , Double 타입으로 추론 합니다.
let integerPi = Int(pi)
// integerPi 는 3 이고, Int 타입으로 추론 합니다.
Integer 값으로 초기화가 된다면 소숫점 값들은 버리게 됩니다. 즉, 4.75 는 4가 되고 -3.9 는 -3 이 됩니다.
Type Aliases 는 현재 사용되는 타입의 선택적인 이름을 정의합니다. typealias 키워드를 이용해서 Type Aliase 정의가 가능합니다.
Type Aliases 는 기존이 타입을 좀더 명확한 이름으로 인용하여 사용할 수 있습니다.
typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min
// maxAmplitudeFound 는 0 입니다.
여기서, AudioSampe 은 Uint16 의 다른 이름입니다. AudioSample.min 은 실제적으로는 UInt16.min 을 호출하게 됩니다.
Swift 는 Bool 이라는 기본적인 Boolean 타입을 가지고 있습니다. Swift 의 Boolean 상수값인 true 와 false 를 제공합니다.
let orangesAreOrange = true
let turnipsAreDelicious = false
Boolean 값은 특히 if 문같은 조건문에서 유용하게 쓰입니다.
if turnipsAreDelicious {
print("Mmm, tasty turnips!")
} else {
print("Eww, turnips are horrible.")
}
Tuples 그룹은 여러개의 값들을 하나의 복합적인 값으로 표현 합니다. tuple 내의 값은 어떤 타입이라도 될 수 있고 서로 같은 타입 일 필요는 없습니다.
let http404Error = (404, "Not Found")
// http404Error 는 (Int, String) 타입입니다.
그리고, tuple 의 내용들을 각각 상수나 변수로 분해 할수도 있습니다.
let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// Prints "The status code is 404"
print("The status message is \(statusMessage)")
// Prints "The status message is Not Found
만약 tuple 내의 값들중에 일부만 필요 하다면, underscore (_) 을 이용하여 무시 할수 있습니다.
let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// Prints "The status code is 404
각 Element 값들은 Index 번호를 이용하여 접근할 수도 있습니다.
print("The status code is \(http404Error.0)")
// Prints "The status code is 404"
print("The status message is \(http404Error.1)")
// Prints "The status message is Not Found
각 Element 들의 고유의 이름을 지정할 수도 있습니다.
let http200Status = (statusCode: 200, description: "OK")
그리고, 이름을 사용하여 해당 값을 접근할 수도 있습니다.
print("The status code is \(http200Status.statusCode)")
// Prints "The status code is 200"
print("The status message is \(http200Status.description)")
// Prints "The status message is OK