Constants and Variables
- Swift에서 상수는 let 변수는 var 를 사용하며 상수를 사용하는 게 성능면에서 유리합니다.
- 또한 생성시 , 를 통해 한 줄에 여러 상수 또는 변수를 선언 가능합니다.
ex) var apple = 10, banana = 20, melon = 30
변수
var friendlyWelcome = "Hello!"
friendlyWelcome = "Bonjour!"
// friendlyWelcome is now "Bonjour!"
상수
let languageName = "Swift"
languageName = "Swift++"
// This is a compile-time error: languageName cannot be changed.
Type Annotations
- 실제로 유형을 작성하지 않고도 값을 초기화가 할 수 있지만 유형을 선언하는 게 성능면에서 유리합니다.
ex) var message : String // <- 해당 방식
- 또한 이 역시 한번에 유형을 정의할 수 있습니다.
ex) let red, green, blue : Double
Naming Constants and Variables
- 상수 및 변수 이름에는 공백 문자, 숫자 기호, 화살표, 전용 유니코드 스칼라 값 또는 선 및 상자 그리기 문자를 사용할 수 없으며, 숫자가 이름의 다른 곳에 포함될 수 있지만 숫자로 시작은 불가능합니다.
Printing Constants and Variables
- Swift 에서도 print 함수를 사용해서 출력을 할 수 있으며 변수 값에 담긴 값을 문자열에 포함시킬 때는
\()를 사용합니다.
출력
print(friendlyWelcome)
// Prints "Bonjour!"
print("The current value of friendlyWelcome is \(friendlyWelcome)")
// Prints "The current value of friendlyWelcome is Bonjour!"
- 위에서 friendlyWelcome라는 변수에 Bonjour라는 문자열을 추가했었습니다. 이와 같이 \()를 사용하여 출력할 수 있습니다.
Comments
- 한줄 주석은 두 개의 슬래시(//)
- 여려줄 주석은 슬래시와 별표로 시작(/*) 별표와 슬래시로 종료(*/)
Semicolons
- 처음 공부할 때 익숙하지 않은 부분 중 하나인데 세미콜론으로 꼭 마무리를 할 필요가 없습니다. 대신 한 줄에 여러 개의 명령문을 작성할 경우에는 꼭 작성해줘야 합니다.
ex) var cat = 100 ; print(cat)
// Prints 100
Integers
- Swift에서는 8, 16, 32, 64비트 형식의 부호 있는 정수와 부호 없는 정수를 제공합니다.
ex) 8비트 부호 없는 정수의 유형이 UInt8
32비트 부호 있는 정수의 유형이 Int32
- 이런 정수 유형은 이름이 대문자로 시작됩니다.
- 32비트 플랫폼에서 Int는 와 크기가 같습니다 Int32.
- 64비트 플랫폼에서 Int는 와 크기가 같습니다 Int64.
- 특정 크기의 정수로 작업해야 하는 경우가 아니면 항상 Int코드에서 정수 값에 사용하십시오. 이것은 코드 일관성과 상호 운용성을 돕습니다. 32비트 플랫폼 Int에서도 -2,147,483,648 및 사이의 모든 값을 저장할 수 있으며 2,147,483,647 많은 정수 범위에 대해 충분히 큽니다.
Integer Bounds
- min 및 max 속성을 사용하여 각 정수 유형의 최소값 및 최댓값에 접근 가능합니다.
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
UInt
- Swift는 현재 플랫폼의 기본 단어 크기와 동일한 크기를 갖는 unsigned 정수 유형을 제공합니다.
- 32비트 플랫폼에서 UInt는 와 크기가 같습니다 UInt32.
- 64비트 플랫폼에서 UInt는 와 크기가 같습니다 UInt64.
Floating-Point Numbers
- 부동 소수점 유형은 정수 유형보다 훨씬 더 넓은 범위의 값을 나타낼 수 있으며 에 저장할 수 있는 것보다 훨씬 크거나 작은 숫자를 저장할 수 있습니다.
- Double 64비트 부동 소수점 숫자를 나타냅니다.
- Float 32비트 부동 소수점 숫자를 나타냅니다.
- Double의 정밀도는 최소 15자리 소수점 이하 자릿수인 반면 Float의 정밀도는 최소 6자리 소수점 이하 자릿수입니다. 사용할 적절한 부동 소수점 유형은 코드에서 작업해야 하는 값의 특성과 범위에 따라 다릅니다. 두 유형 중 하나가 적절한 상황에서는 Double이 선호됩니다.
Type Safety and Type Inference
- Swift는 유형이 안전하기 때문에 코드를 컴파일할 때 유형 검사를 수행하고 일치하지 않는 유형을 오류로 플래그 지정합니다.
- 예를 들어, 어떤 유형인지 정하지 않고 새 상수에 의 리터럴 값을 할당하면 Swift는 Int정수처럼 보이는 숫자로 초기화했기 때문에 Int 타입으로 추론합니다.
let meaningOfLife = 42
// meaningOfLife is inferred to be of type Int
- 마찬가지로, 부동 소수점 리터럴에 대한 유형을 지정하지 않으면 Swift는 다음을 Double 타입으로 생성하고 싶다고 추론합니다.
let pi = 3.14159
// pi is inferred to be of type Double
- Swift는 부동 소수점 숫자의 유형을 유추할 때 항상 Double(대신 Float)을 선택합니다.
- 정수와 부동 소수점 리터럴을 결합하면 콘텍스트에서 Double 유형으로 유추됩니다.
let anotherPi = 3 + 0.14159
// anotherPi is also inferred to be of type Double
Numeric Literals
- 정수 리터럴 17의 값은
let decimalInteger = 17
let binaryInteger = 0b10001 // 17 in binary notation
let octalInteger = 0o21 // 17 in octal notation
let hexadecimalInteger = 0x11 // 17 in hexadecimal notation
- 부동 소수점 리터럴은 10진수와 16진수(0x)로 표현되며 소수점 양쪽에는 항상 숫자가 있어야 합니다. 16진수 부동 소수점은 지수가 있어야 하기 때문에 대문자 또는 소문자 p로 표시됩니다.
- 지수가 exp인 십진수의 경우 기본 수에 10 exp를 곱합니다.
- 1.25e2는 1.25 x 10 2 또는 125.0.
- 1.25e-2는 1.25 x 10 -2 또는 0.0125.
- 지수가 exp인 16진수의 경우 기본 수에 2 exp를 곱합니다.
- 0 xFp2는 15 x 2 2 또는 60.0.
- 0 xFp-2는 15 x 2 -2 또는 3.75.
- 부동 소수점 리터럴의 십진수 값은 12.1875 다음과 같습니다.
let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0
- 숫자 리터럴에는 읽기 쉽도록 추가 서식이 포함될 수 있습니다. 정수와 부동 소수점은 모두 0으로 채워질 수 있으며 가독성을 돕기 위해 밑줄을 포함할 수 있습니다. 두 형식 모두 리터럴의 기본 값에 영향을 주지 않습니다.
let paddedDouble = 000123.456
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1
Type Aliases
- 기존 유형의 대체 이름을 정의합니다. typealias키워드로 유형 별칭을 정의합니다.
typealias AudioSample = UInt16
var maxAmplitudeFound = AudioSample.min
// maxAmplitudeFound is now 0
Booleans
- true와 false의 값을 가집니다.
- 보통 다른 언어에서는
let i = 1
if i {
// this example will not compile, and will report an error
}
- 이런 형태로 진행을 했는데 Swift에서는 에러가 발생합니다.
let i = 1
if i == 1 {
// this example will compile successfully
}
- 이런 형태로 비교를 진행하면 됩니다.
Tuples
- 튜플은 여러 값을 단일 복합 값으로 그룹화합니다. 튜플 내의 값은 모든 유형이 될 수 있으며 서로 동일한 유형일 필요는 없습니다.
let http404Error = (404, "Not Found")
// http404Error is of type (Int, String), and equals (404, "Not Found")
- 튜플 사용 시
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"
- 튜플 값 중 일부만 필요할 경우 _ 을 사용하여 원하지 않는 값을 생략할 수 있습니다.
let (justTheStatusCode, _) = http404Error
print("The status code is \(justTheStatusCode)")
// Prints "The status code is 404"
- 또한 인덱스 번호를 사용하여 개별 요소 값에 접근할 수 있습니다.
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"
- 튜플이 정의될 때 튜플의 개별 요소 이름을 지정할 수 있습니다.
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"
- 튜플은 관련된 값의 간단한 그룹에 유용합니다. 복잡한 데이터 구조 생성에는 적합하지 않습니다. 데이터 구조가 더 복잡할 가능성이 있는 경우 튜플이 아닌 클래스 또는 구조체로 모델링하는 걸 추천드립니다.
Optionals
- 값의 부재에 대처하기 위해 옵셔널을 사용하는 방법의 예를 보여드리겠습니다.
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// convertedNumber is inferred to be of type "Int?", or "optional Int"
Nil
- 특별한 값을 할당하여 선택적 변수를 값이 없는 상태로 설정합니다.
var serverResponseCode: Int? = 404
// serverResponseCode contains an actual Int value of 404
serverResponseCode = nil
// serverResponseCode now contains no value
- 기본값 없이 선언하는 경우
var surveyAnswer: String?
// surveyAnswer is automatically set to nil
- Objective-C에서 nil 은 존재하지 않는 개체에 대한 포인터입니다. Swift에서 nil은 포인터가 아니라 특정 유형의 값이 없다는 것입니다.
If Statements and Forced Unwrapping
- if문을 사용하여 옵셔널과 옵셔널을 비교하여 옵셔널에 값이 포함되어 있는지 확인할 수 있습니다.
if convertedNumber != nil {
print("convertedNumber contains some integer value.")
}
// Prints "convertedNumber contains some integer value."
- Optional에 값 이 포함되어 있다고 확신하면 옵셔널 이름 끝에 느낌표(!)를 추가하여 기본 값에 접근할 수 있습니다.
이를 Optional 값의 강제 언래핑이라고 합니다.
if convertedNumber != nil {
print("convertedNumber has an integer value of \(convertedNumber!).")
}
// Prints "convertedNumber has an integer value of 123."
- 존재하지 않는 Optional 값에 접근하는 0 데 사용하려고 하면 런타임 오류가 트리거 됩니다. 사용하기 전에 Optional에 값이 포함되어 있는지 항상 확인해야 합니다.
Optional Binding
if let constantName = someOptional {
statements
}
- 밑에는 위와 같은 형식의 예시입니다.
if let actualNumber = Int(possibleNumber) {
print("The string \"\(possibleNumber)\" has an integer value of \(actualNumber)")
} else {
print("The string \"\(possibleNumber)\" couldn't be converted to an integer")
}
// Prints "The string "123" has an integer value of 123"
- 단일 문에 Optional Binding 사용하여 아래와 같이 표현할 수 있습니다.
if let firstNumber = Int("4"),
let secondNumber = Int("42"),
firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"
if let firstNumber = Int("4") {
if let secondNumber = Int("42") {
if firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
}
}
// Prints "4 < 42 < 100"
Error Handling
- throws와 do try catch로 처리 가능합니다.
func canThrowAnError() throws {
// this function may or may not throw an error
}
do {
try canThrowAnError()
// no error was thrown
} catch {
// an error was thrown
}
Assertions
- 조건이 참일 때만 동작하는 함수입니다.
let age = -3
assert(age >= 0, "A person's age can't be less than zero.")
// This assertion fails because -3 isn't >= 0..
Preconditions
- 거짓일 가능성이 있을 때마다 전제조건을 사용하여 거짓일 경우 보여줄 메시지를 전달할 수 있는 함수입니다.
// In the implementation of a subscript...
precondition(index > 0, "Index must be greater than zero.")
내용은 https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html를 보면서 작성하였고 원문으로 작성된 내용을 옮기다 보니 이상한 부분이 있을 수 있습니다. 자세한 내용은 위의 링크를 확인해주시기 바랍니다.
'컴퓨터 언어 > Swift' 카테고리의 다른 글
(Swift) 5. Functions (함수) (0) | 2021.12.07 |
---|---|
(Swift) 4. Control Flow (제어문) (0) | 2021.12.07 |
(Swift) 3. Collection Types (컬렉션 타입) (0) | 2021.12.06 |
(Swift) 2. Strings and Characters (문자열과 문자) (0) | 2021.12.05 |
(Swift) 1. Basic Operators (기본 연산자) (0) | 2021.12.05 |