swift의 기본 데이터 타입은 구조체를 기반으로 구현되어 있다. swift의 모든 데이터 타입 이름은 첫 글자가 대문자로 시작하는 대문자 카멜케이스를 사용한다.
정수 타입으로 Int는 +, - 부호를 포함한 정수를 의미하고, UInt는 0을 포함한 양의 정수를 의미한다. 시스템 아키텍쳐에 따라 타입이 달라지며 각각 8bit, 16bit, 32bit, 64bit의 형태가 있다.
swift는 데이터 타입에 있어 매우 엄격하기 때문에 Int와 UInt는 같은 정수 타입일지라도 아예 다른 타입으로 인식한다. 그렇기 때문에 양의 정수만을 사용하더라도 Int 값의 범위에 포함된다면 UInt가 아닌 Int를 사용하는 것이 값을 교환하는 데 있어 더 효율적일 수 있다.
boolean 타입으로 true 혹은 false 값을 가진다.
let boolean: Bool = true
boolean.toggle() //true - false 반전
부동소수점을 사용하는 실수 타입이다. 정수보다 훨씬 넓은 범위의 수를 표현할 수 있다. Float는 32bit, Double은 64bit의 부동 소수를 표현한다.
Float과 Double 타입에 정수값을 넣어도 문제되지 않지만, Double값에 Float값을 넣게 되면 에러가 발생한다.
문자형 타입으로 앞뒤에 큰따옴표를 붙여 표현한다. Character은 문장이 아닌 단 하나의 문자를 의미하며 String은 문자의 집합, 즉 문자열을 의미한다. 유니코드9 문자를 사용하여 영어는 물론, 한글 및 이모티콘도 사용이 가능하다.
문자열 다루기!
// 이니셜라이저를 사용하여 빈 문자열 생성
var message: String = String()
let hello: Striing = "hello"
let world: String = "world"
// .append()와 + 기호를 사용하여 문자열을 이어 붙일 수 있음
message.append(hello) // hello
message = message + " " + world // hello world
// .isEmpty()를 사용하여 문자열이 비어있는지 확인 가능
print(message.isEmpty) //false
// 대소문자 변환
print(message.uppercased()) // HELLO WORLD
print(message.lowercased()) // hello world
// 문자열이 특정 문자(혹은 문자열)로 시작하는지 확인
var hasPrefix: Bool = false
hasPrefix = message.hasPrefix("hell") // true
hasPrefix = message.hasPrefix("wo") // false
// 문자열이 특정 문자(혹은 문자열)로 끝나는지 확인
var hasSuffix: Bool = false
hasSuffix = message.hasSuffix("he") // false
hasSuffix = message.hasSuffix("rld") // true
// 문자열에 특정 문자(혹은 문자열)이 포함되어 있는지 확인
var contains: Bool = false
contains = message.contains("hello") // true
contains = message.contains("WORLD") // false
이들의 공통점은 데이터 타입의 위치에서 특정한 역할을 수행한다는 점이다.
먼저 Any는 swift의 모든 데이터 타입을 사용할 수 있다. 변수 또는 상수의 데이터 타입이 Any로 지정되어 있다면 nil을 제외한 어떤 종류의 데이터 타입도 할당할 수 있다.
다음으로 AnyObject는 클래스의 인스턴스만 할당할 수 있다. Any와 마찬가지로 nil값은 할당할 수 없다.
타입이 엄격한 swift의 특성상 Any 혹은 AnyObject로 선언된 변수의 값을 사용하려면 매번 타입을 확인한 후 변환을 해주는 불편함이 있기 때문에 되도록 사용하지 않는 것이 좋다!
nil은 '없음'을 나타내는 키워드로, 변수 또는 상수에 값이 들어있지 않고 비어있음을 나타낸다.
자세한 내용은 추후에 정리하도록 하겠슴니다
출처 : 스위프트 프로그래밍 3판 (야곰)