DEVELOPMENT/iOS AOS

[Swift] 공식 문서 요약 - The Basics_02

heeble 2023. 9. 13. 01:13
본 내용은 Swift 공식 문서에 기반하여 작성되었습니다.
https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html

 

 

Integers [정수] 

부분 표현이 아닌 수. 부호가 있거나 (양수, 0, 음수) 없는(양수, 0) 수를 포함

// 부호가 없는 정수 유형 : 8-bit , 부호가 있는 정수 유형 : 32-bit

// 각 유형에 별도의 이름이 존재한다 (Int8, Int32 등)

let minValue = UInt8.min  // minValue is equal to 0, and is of type UInt8
let maxValue = UInt8.max  // maxValue is equal to 255, and is of type UInt8

// 각 유형의 최대, 최소값의 경우 min/max를 활용하여 확인할 수 있다.

 

 

Int 대부분의 경우 플랫폼의 크기와 동일한 크기의 정수 유형을 제공

  // 32-bit platform : Int32

  // 64-bit platform : Int64

 

UInt Unsigned(양수, 0)의 정수 유형을 제공

  // 32-bit platform : Int32

  // 64-bit platform : Int64


Floating-Point Numbers [부동 소수점 숫자] 

실수 유형

// 정수 유형보다 훨씬 더 넓은 범위의 값을 표현

// Swift에는 두 개 유형의 부동 소수점 숫자를 제공 (Double (64-bit), Float (32-bit))

// Double은 십진수 15이상, 정밀도는 Float가 더 높다. 둘다 적합한 상황에서는 Double이 선호된다.


Type Safety and Type Inference [유형 안전성 및 유형 추론]

// Type Safety : 코드가 String 변수를 필요로 하는 경우, 실수로라도 Int를 전달할 수 없다는 의미로, 컴파일 시 유형 검사를 수행

// Type Inference : 필요한 값의 유형을 지정하지 않으면 Swift는 유형 추론을 통해 적절한 유형을 유추

// 유형 추론 시 실수의 경우 Double로 추론.


Numeric Literals[숫자 리터럴]

// 10 진수 : no prefix

// 2 진수 : 0b

// 8 진수 : 0o

// 16 진수 : 0x

let decimalInteger = 17
let binaryInteger = 0b10001       // 17 in 2진수
let octalInteger = 0o21           // 17 in 8진수
let hexadecimalInteger = 0x11     // 17 in 16진수

Numeric Type conversion [숫자 형변환]

// 일반적으로 Int를 사용하는게 좋다.(음수가 아니더라도) -> 즉시 상호 운용 가능하기 때문

// 명시적으로 크기가 지저오딘 데이터 혹은 성능과 메모리 사용량 관리의 측면에서 필요한 경우 다른 정수 유형을 사용한다.

 

// 변수에 저장할 수 있는 순자의 범위는 숫자 유형마다 다르다. Int8 (-128 ~ 127), UInt8(0 ~ 255)

 

let cannotBeNegative: UInt8 = -1
// UInt 타입에 음수를 저장할 수 없다. (Error!!!!!!!!)
let tooBig: Int8 = Int8.max + 1
// 최대값보다 큰 수를 저장할 수 없다. (Error!!!!!!!!)

      // ********** 정수
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)
// 변수 one을 UInt16으로 형변환하여 더하기 연산 가능

Type Aliases [유형 별칭]

// 변수 유형에 대해 대체하는 이름을 지정할 수 있다.

// 특정 크기, 유형의 데이터로 작업할 때 더 적절한 이름으로 기존 유형을 이용하는 경우

 

typealias AudioSample = UInt16

var maxAmplitudeFound = AudioSample.min
// AudioSample.min에 대한 실제 호출은 UInt16.min

Booleans [논리형] 

  true(참), false(거짓)

// 부호가 없는 정수 유형 : 8-bit , 부호가 있는 정수 유형 : 32-bit

// 각 유형에 별도의 이름이 존재한다 (Int8, Int32 등)

let orangesAreOrange = true
let turnipsAreDelicious = false

if turnipsAreDelicious {
    print("Mmm, tasty turnips!")
} else {
    print("Eww, turnips are horrible.")
}
// 결과값 : "Eww, turnips are horrible."
// if문은 true(참)인 경우에 실행, 그러나 turnipsAreDelecious의 경우 false(거짓)이므로 if문은 통과, else문 실행.


let i = 1
if i {
}  // i는 논리형이 아니므로 컴파일에러

if i == 1 {
}  // 'i 는 1과 같다' 는 명제는 참/거짓의 결과값이 존재하므로 컴파일 가능

Tubles [튜플] 

여러 값을 단일 복합 값으로 그룹화

// 튜플 내의 값은 모든 유형이 될 수 있으며, 각 값이 같은 유형일 필요는 없다.

 

// 상수를 튜플로 선언 

let http404Error = (404, "Not Found")
// http404Error는 (Int, String) 타입을 가지는 튜플이며, (404, "Not Found") 와 동일

 

// 선언된 튜플을 분해

let (statusCode, statusMessage) = http404Error
print("The status code is \(statusCode)")
// 결과값 :  "The status code is 404"
print("The status message is \(statusMessage)")
// 결과값 :  "The status message is Not Found"

 

 

// 튜플 분해 시 특정 값 고의 누락

let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// 결과값 : "The status code is 404"    - 튜플을 분해할 때 밑줄(_) 사용 시 일부를 무시.

 

// 인덱스를 활용한 변수에 대한 접근 

print("The status code is \(http404Error.0)")
// 결과값 : "The status code is 404"
print("The status message is \(http404Error.1)")
// 결과값 : "The status message is Not Found"
// 인덱스 번호는 0에서 시작, 이 수자를 통해 개별 요소 값 호출 가능.

 

// 튜플 정의 시 개별 요소 이름 지정 가능

let http200Status = (statusCode: 200, description: "OK")

print("The status code is \(http200Status.statusCode)")
// 결과값 :  "The status code is 200"
print("The status message is \(http200Status.description)")
//결과값 :  "The status message is OK"