티스토리 뷰
반응형
상수와 변수 (Constants and Variables)
- 상수와 변수는 특정타입의 값을 의미한다.
- 상수는 값을 지정 후 변경이 불가능하다.
- 변수는 값 지정 후 변경이 가능하다.
// 선언 방식
let sampleL: String = "나 상수" // 값 변경 불가능
var sampleV: String = "나 변수" // 값 변경 가능
var sampleI = 0 // 타입 추론
Type Safety
- Swift는 type-safe 언어이다.
- 코드를 컴파일 할 때 타입 검사를 수행하고 일치하지 않는 타입을 오류로 표시한다.
- 이를 통해 개발 단계에서 가능한 빨리 오류를 포착하고 수정이 가능하다.
- 아래 예제처럼 Bool이 아닌 값이 Bool로 대체되는 것을 방지한다.
let yes: Bool = true
let num: Int = 1
if yes {
// 컴파일 성공
}
if num {
// 컴파일 에러
}
if num == 1 {
// 컴파일 성공
}
타입 별칭(Type Aliases)
- 이미 존재하는 타입을 다른 이름으로 정의한다.
- 외부 소스에서 특정 크기의 데이터로 작업할 때와 같이 상황에 맞는 이름으로 기존 타입을 참조하려는 경우에 유용하다.
typealias sample = UInt16
// 타입 별칭을 정의하면 원래 이름을 사용할 수 있는 모든 위치에서 별칭을 사용할 수 있다.
var sampleA = sample.min
튜플 (Tuples)
- 여러 값을 단일 복합 값으로 그룹화 한다.
- 튜플안에 값은 어떠한 타입도 가능하며 서로 같은 타입일 필요는 없다.
let animals = ("dog", "cat")
let (dog, cat) = animals
print("This is \(dog)") // This is dog
print("This is \(cat)") // This is cat
print(animals.1) // 인덱스를 사용하여 개별 요소 접근 가능
let person = (name: "Jane", age: "22") // 키/밸류 형식으로도 정의 가능
print("name \(person.name), age \(person.age)") // 키값으로 접근 가능
옵셔널(Optionals)
- 값이 없을 수 있는 상황에 안전하게 처리하기 위해 옵셔널을 사용한다.
- 문자열의 숫자값은 숫자값으로 변환될 수 있지만 문자열은 변환할 숫자값이 없다.
- 옵셔널 타입 선언은 타입뒤에 ? 를 작성한다.
let num = "1"
let convertedNum = Int(num) // 옵셔널 타입으로 반환됨
let sample: String? = "sample" // 옵셔널 선언
nil
- 값이 없는 상태를 말한다.
- 옵셔널에 값이 없다면 nil로 표시된다.
var num: Int? // 값이 없는 현재 상태는 nil
옵셔널 바인딩(Optional Binding)
- 옵셔널에 값이 있는지 확인하고 옵셔널을 풀어준다.
- if, guard와 while 구문에서 옵셔널에 값이 있는지 확인하고 추출한다.
if let name = optionalValue {
// somethig...
} else {
}
강제 언래핑(Force Unwrapping)
- 옵셔널 값을 강제로 언래핑을 해야 할 경우 옵셔널 이름 뒤에 !(느낌표)를 붙인다.
- 만약 값이 nil인 상태에서 시행 할 경우 런타임 에러가 발생한다.
let sample: String? = "Hi"
print(sample!) // 강제 언래핑
Implicitly Unwrapped Optionals
- 옵셔널이 값을 처음 설정한 후에는 항상 값을 갖는 것은 분명하다. 이러한 경우 항상 값이 있다고 가정할 수 있으므로 접근할 때마다 옵셔널의 값을 확인하고 언래핑할 필요는 없다.
- String?를 작성하는 대신에 String!로 암시적으로 언래핑 된 옵셔널을 작성한다.
- 사용할 때 옵셔널 이름의 뒤에 느낌표를 위치시키는 것보다 선언할 때 옵셔널 타입 뒤에 느낌표를 위치시키는 것이 더 좋다.
- 나중에 변수가 nil이 될 가능성이 있다면 사용하면 안된다.
let possibleString: String? = "옵셔널 스트링"
let forcedString: String = possibleString! // 옵셔널을 풀어줘야함
let assumedString: String! = "암시적으로 언래핑된 옵셔널 스트링"
let implicitString: String = assumedString // 옵셔널 바인딩 필요없이 바로 사용 가능
에러 처리(Error Handling)
- 프로그램이 실행되는 동안 에러가 발생할 때 처리하기 위해 에러 처리를 사용한다.
- 에러 원인을 판별하고 필요한 경우 에러를 프로그램의 다른 부분으로 전파 할 수 있다.
- 함수는 선언에 throws키워드를 포함시켜 에러가 발생할 수 있음을 나타낸다.
- 에러를 발생할 수 있는 함수를 호출할 때는 표현식 앞에 try 키워드를 붙여야 한다.
func canThrowAnError() throws {
// 에러가 발생하면 발동
}
do {
try canThrowAnError()
// 에러가 발생하지 않음
} catch { // Swift는 catch 절에 의해 처리될 때까지 현재 범위에서 에러를 자동으로 전파한다.
// 에러가 발생
}
func login() throws {
// ...
}
do {
try login()
loginSuccess()
} catch LoginError.idIsIncorrect {
print("아이디가 틀렸습니다.")
} catch LoginError.pwIsIncorrect {
print("비밀번호가 틀렸습니다.")
}
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Observable
- Android
- LazyHStack
- string
- dictionary
- gcd
- UIScrollView
- WebView
- Firebase
- Apple
- autolayout
- Swift
- SwiftUI
- 문자열
- UITabBarController
- RxSwift
- Alamofire
- github
- 웹뷰
- 라이트모드
- NavigationLink
- SwiftLint
- Realtime Database
- remote config
- 다크모드
- Java
- subscript
- swipe
- UIButton
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함