본문 바로가기
언어 공부/Swift

[Swift/iOS] 03. 변수와 상수 그리고 자료형

by 안다니. 2020. 8. 31.
반응형

Swift 변수 상수 그리고 자료형

 

먼저 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 기초 - 특징,변수,상수,타입

반응형

댓글