먼저 Swift는 변수는 var 상수는 let 이라는 키워드를 사용한다.
변수는 변경이 가능한 수를 말하며, 상수는 변하지 않는 수를 말한다. 아래와 같이 선언 할 수 있다. 그리고 선언과 동시에 값을 할당할 수 있다.
var 변수명:type
let 상수명:type
var a: Int = 100 // 100은 타입 선언이 없어도 int형임이 추론이 가능하다. 그러므로 타입을 지정 안해도 OK
let a = "hello"
type(of: a) // 타입을 확인하기 위해서는 이렇게 type() 을 사용하면 된다.
Bool 타입
Bool은 Swift 뿐만 아니라 많은 언어에서 사용이 된다. 이 타입은 ture , false를 통해 참과 거짓을 나타내는 타입이다. true, false를 대입 할 때 타입을 선언해주지 않으면 자연스럽게 bool 타입으로 입력이 된다
let a = true
let b = false
let c = !a // !는 Not이라는 뜻으로 true가 아니니까 false의 값이 들어가게 된다.
Number 타입
Number에서 가장 많이 쓰는 타입은 아무래도 Int가 아닐까 생각이 든다. 다양한 자료형이 있지만, 정수를 나타날 때 흔히 Int를 쓰곤 한다. 그렇다면 정수가 아니라면? Double과 Float을 사용하곤 한다. Bool 타입과 마찬가지로 정수를 넣으면 자연스럽게 Int 부동 소수점 값을 넣으면 Double로 값이 된다
let a: Int = 100 //Int
let b = 200 //Int
let x:Double = 2.4 //Double
let y = 5.5 //Double
String , Character 타입
String 또한 많이 사용된다. 문자열을 나타내는데 흔히 " (큰 따옴표)로 묶어준다. \(변수)를 사용하면 변수의 값이 출력 가능하다.
Character는 단일 문자를 말한다. 아스키코드로 사용을 많이 했었다.
.hasPrefix("문자열") 로, 해당 문자열에 일치하는지 안하는지 알 수 있다.
let result = 1+1 //2
let a: String = "1+1의 결과는 \(result) 입니다." //2
///////////////////////////////////////////////////////
let a = "a" //String
let b: Character = "a" //Character
Array<Element> 타입
배열을 나타내는 컬렉션입니다. 결국 구체적인 타입을 넣으면 Array(자료형) 으로 이루어진 배열이 됩니다.
let i = [1,2,3,4,5] // [Int] Type
let s = ["a", "b", "c"] // [String] Type
let ia = [[1,2], [3,4]] // [[Int]] Type
let x = [1, 2, "a"] // Complie Error
var list = [1,2,3]
list[1] // 2
list[1] = 4
list // [1,4,3]
list.append(2) // [1,4,3,2]
list.insert(0, at: 0) // [0,1,4,3,2]
list.remove(at: 2) // [0,1,3,2]
list.removeAll // []
Dictionary<Key,Value> 타입
딕셔너리 타입은 키와 값의 쌍을 갖는 컬렉션 입니다. 키를 값에 접근하기 위한 용도로 사용됩니다. 키 - 값 쌍사이에 순서는 상관 없습니다. 키는 유니크하며 값은 중복이 되어도 상관이 없습니다.
let a = ["a": 1]
let b = a["a"] // 1 (Optional<Int> 타입이다.)
let dic = ["key1": "val1"]
let v1 = dic["key1"] != nil // true
let v2 = dic["key2"] != nil // false
// 값을 변경합니다
var a1 = ["key": 1]
a1["key"] = 3
a1 // ["key": 3]
// 값을 추가합니다.
var a2 = ["key1": 1]
a2["key2"] = 2
a2 // ["key1": 1, "key2": 2]
// 값을 삭제합니다.
var a3 = ["key": 1]
a3["key"] = nil
a3 // [:]
Any 타입
Any타입은 모든 타입을 넣을 수 있다고 합니다.
let a: Any = "문자열"
let b: Any = 128.124
타입 캐스팅
값의 타입을 확인 하려면 is 연산자를 사용하면 됩니다. 그리고 상위 캐스팅은 연산자 as를 사용, 하위 캐스팅은 as? 를 사용합니다.
let a = "abc" as Any // String > Any 상위 캐스팅
///////////////////////////////////////////////////
let a = 44 as Any
let b = a as? Int // Optional(12)
let x = a as? String // nil
튜플 타입
여러가지 타입을 모아서 취급하는 것이 튜플입니다. ()로 구분합니다. 그리고 갯수에 재한은 없습니다
var t: (Int, String)
t = (1, "a")
var u: (Int, String, Double)
u = (1, "a", 12.3)
/////////////////튜플에 접근하기
let t = (int: 1, string: "a")
let i = t.int // 1
let s = t.string // "a"
Optional<Wrapped> 타입
Swift 언어의 변수와 상수는 기본적으로 nil 타입을 허용하지 않습니다. nil이 필요한 경우 위의 타입을 사용합니다. 하지만 구체적인 타입을 지정해줘야 합니다.
enum Optional<Wrapped> {
case none //값이 없는 경우 nil
case some(Wrapped) // 값이 있는 경우
}
////////////////////////////////////////////////
let n = Optional<Int>.none
print(".none: \(n)") // nil
let s = Optional<Int>.some(5)
print(".some: \(s)")
///////////////////////////////////////////////////
var a: Int?
a = nil // nil 리터럴 대입에 의한 .none 생성
a = Optional(5) // 이니셜라이저에 의한 .some 생성
a = 3 // 대입에 의한 .some 생성
Optoinal Binding은 조건 분기문이나 반복문 조건을 이용해 Optional<Wrapped> 타입 값의 유무에 따라 처리를 전환하는 방법이다. Optional Binding은 if-let문을 이용해 처리한다.
let a = Optional("한") //Optional<String> 타입
if let r = a {
// do something // a값이 존재하는(nil아 아닌)경우에 실행
}
Optional Chain은 Unwrap을 하지 않고 Wrapped 타입의 속성이나 함수에 접근하는 방식이다. Optional<Wrapped>타입에서 Wrapped타입의 속성에 접근하려면 일단 Optional Binding으로 접근해야 한다.
let a = Optional(10.0)
leb b: Bool?
if let x = a {
b = x.isInfinite
} else {
b = nil
}
print(b) // Optional(false)
//////////////////////////////
Wrapping하지 않고 Wrapped 타입의 속성이나 함수에 접근할 수 있는 방법도 있다.
let a= Optiona(10.0)
let b = a?.isInfinite
print(b) // Optional(false)
Set 타입
배열과 비슷하지만 다르다. 배열은 순서가 있지만 Set은 순서가 없다. Set은 흔히 집합에서 사용이 된다
let transfer = subway2.intersect(subway3) //교집합
let notTransfer = subway2.subtract(subway3) //차집합
let union = subway2.union(subway3) // 합집합
let exOR = subway2.exclusiveOr(subway3) // 두집합의 공통부분을 제외한 부분을 반환
차근 차근 따라하면서 작성한 문서입니다. 읽어주셔서 감사합니다 :)
출처 : Swift 기초 - 특징,변수,상수,타입
'언어 공부 > Swift' 카테고리의 다른 글
[Swift/iOS] 02. interaction을 이해해보자 ! (0) | 2020.08.31 |
---|---|
[Swift/iOS] 01. StoryBoard를 이해해보자(Hello World) (0) | 2020.08.30 |
댓글