스위프트 Swift 기초 공부 #2 type, collections, Any, AnyObject, nil

사공 오·2022년 5월 12일
0

Swift 기초 공부

목록 보기
2/6
post-thumbnail

swift 기본 데이터 타입

  • Bool, Int, UInt, Float, Double, Character, String

Bool - 참 거짓

var someBool: Bool = true
someBool = false
// someBool = 0 오류남 트루 펄스만 가능 (정수값은 안된다!)
// someBool = 1

- 정수값은 안된다

Int - 64bit 정수

var someInt = -100
//someInt = 100.1 실수넣으면 오류남

- 100.1 실수넣으면 오류남

UInt - 언사인드인트 (부호가 없는 정수)

var someUInt = 100
//someUInt = -100 오류남

- 음수 오류남

Float - 부동소수형 32bit

var someFloat: Float = 3.14
someFloat = 3 //정수넣어도 문제 없음

- 정수넣어도 문제 없음

Double - 부동소수형 64bit

var someDouble: Double = 3.14
someDouble = 3
// someDouble = someFloat 오류 발생

character 한글자 문자 - 유니코드사용해서 모든 문자를 사용할 수 있음

var someCharacter: Character = "🇰🇷"
someCharacter = "a"
someCharacter = "가"
// someCharacter ="하하하" 문자열을 넣으면 오류남

- 문자열을 넣으면 오류발생

String - 문자열

var someString: String = "하하하 😄 "
someString = someString + "웃으면 복이 와요"
print(someString)

// someString = someCharacter 오류남 다른 데이터와 자료 교환은 암시적으로 불가능하다고 인지하기 (데이터 타입 바꾸는거는 다음에)



Any, AnyObject, nil

Any - Swift의 모든 타입을 지칭하는 키워드
AnyObject - 모든 클래스 타입을 지칭하는 프로토콜
nil - 없음을 의미하는 키워드

Any - Swift의 모든 타입을 지칭하는 키워드

var someAny: Any = 100
someAny = "어떤 타입도 수용 가능합니다"
someAny = 123.32

//let someDouble: Double = someAny 오류발생 애니타입 -> 더블타입 불가능!

- 애니타입 -> 더블타입 불가능!

AnyObject - 모든 클래스 타입을 지칭하는 프로토콜

class SomeClass{}

var someAnyObject: AnyObject = SomeClass()

//someAnyObject = 123.12 오류발생

nil - 없음을 의미하는 키워드 / (null, NULL, Null과 유사한 타입)

someAny = nil 
// 오류발생 - Any는 어떤 데이터값도 들어올 수 있지만 빈값은 들어올 수 없다

someAnyObject = nil  
// 오류발생 - AnyObject는 어떤 클래스는 들어올 수 있지만 빈값은 들어올 수 없다

//nil 다루는 방법은 옵셔널 파트에서 다룹니다

- Any는 어떤 데이터값도 들어올 수 있지만 빈값은 들어올 수 없다
- AnyObject는 어떤 클래스는 들어올 수 있지만 빈값은 들어올 수 없다



컬렉션 타입 (Array, Dictionary, Set)

Array - 순서가 있는 리스트 컬렉션
Dictionary - '키'와 '값'의 쌍으로 이루어진 컬렉션
Set - 순서가 없고, 멤버가 유일한 컬렉션


Array - 순서가 있는 리스트 컬렉션
ex) Boostcamp iOS 수강생 명부 작성을 위한 컬렉션

//빈 Int Array 생성
var integers: Array<Int> = Array<Int>()

// 위와 동일한 표현
 var integers: Array<Int> = [Int]()
 var integers: Array<Int> = []
 var integers: [Int] = Array<Int>()
 var integers: [Int] = [Int]()
 var integers: [Int] = []
 var integers = [Int]()

빈 Int Array 생성

integers.append(1)
integers.append(100)
// integers.append(100.1) - int 아닌 값을 넣으면 오류남

integers.contains(100) //true
integers.contains(99) //false

integers.remove(at: 0) //index 0인 값 지우기
integers.removeLast() //마지막 항목 지우기
integers.removeAll() //모든 항목 지우기

integers.count //항목 개수 확인

// integers[0] //0번째 항목에 접급 but 없어서 오류 발생

Array 함수

//더블 어레이 생성
var doubles: Array<Double> = [Double]()

//스트링 어레이 생성
var strings: [String] = [String]()

//캐릭터 어레이 생성
var characters: [Character] = []


// 불변 Array: let을 사용하여 Array 선언
let immutableArray = [1, 2, 3]

// 수정이 불가능한 Array이므로 멤버를 추가하거나 삭제할 수 없다
//immutableArray.append(4)
//immutableArray.removeAll()

- 더블, 스트링, 캐릭터 타입 Array 생성
- 불변 Array: let을 사용하여 Array 선언


Dictionary - '키'와 '값'의 쌍으로 이루어진 컬렉션
ex) 책의 제목과 저자 정리를 위한 컬렉션


var anyDictionary: Dictionary<String, Any> = [String: Any]()

Key가 String 타입이고 Value가 Any인 ( <String, Any> ) Dictionary 생성

// 키[]에 해당하는 값 할당 - 순서가 있지는 않음
anyDictionary["someKey"] = "value"
anyDictionary["anotherKey"] = 100

print(anyDictionary) // ["someKey": "value", "anotherKey": 100]

// 키에 해당하는 값 변경
anyDictionary["someKey"] = "dictionary"
print(anyDictionary) // ["someKey": "dictionary", "anotherKey": 100]

// 키에 해당하는 값 제거
anyDictionary.removeValue(forKey: "anotherKey") //anotherKey에 해당 값 제거
anyDictionary["someKey"] = nil //someKey에 해당값 제거
print(anyDictionary)

Dictionary 함수


// 불변 Dictionary: let을 사용하여 선언
let emptyDictionary: [String: String] = [:] // 빈 딕셔너리이다 표현 (축약 문법)
let initalizedDictionary: [String: String] = ["name": "ony", "gender": "female"]

불변 Dictionary: let을 사용하여 선언

emptyDictionary["key"] = "value" // 오류발생 - 불변이므로 값 변경 불가

let someValue: String = initalizedDictionary["name"]
// "name"이라는 키에 해당하는 값이 없을 수 있으므로 String 타입의 값이 나올 것이라는 보장이 없어서 오류 발생

// 키에 해당하는 값을 다른 변수나 상수에 할당하고자 할 때는 옵셔널과 타입 캐스팅 파트에서 다룬다

불변 Dictionary - 오류발생
키에 해당하는 값이 없을 수 있으므로 String 타입의 값이 나올 것이라는 보장이 없어서 오류 발생

Set - 순서가 없고, 멤버가 유일한 컬렉션
ex) 영어 알파벳 소문자를 모아두는 컬렉션

var integerSet: Set<Int> = Set<Int>() // Array, Dictionary와 다르게 축약형 없음

Set 생성

// insert : 새로운 멤버 입력
// 동일한 값은 여러번 insert해도 한번만 저장됩니다.
integerSet.insert(1)
integerSet.insert(99)
integerSet.insert(99)
integerSet.insert(99) // 여러번 추가해도 중복된 값이 없음
integerSet.insert(100)

print( integerSet ) // {100, 99, 1}

print( integerSet.contains(1) ) // true 멤버 포함 여부 확인
print(integerSet.contains(2)) // false


integerSet.remove(99) // {100, 1}
integerSet.removeFirst() // {1}

// count: 멤버 개수
integerSet.count // 1

Set 함수

// 멤버의 유일성이 보장되기 때문에 집합 연산에 활용하면 유용합니다.
let setA: Set<Int> = [1, 2, 3, 4, 5]
let setB: Set<Int> = [3, 4, 5, 6, 7]

// 합집합
let union: Set<Int> = setA.union(setB) //.union
print(union) // [2, 4, 5, 6, 7, 3, 1]

// 합집합 오름차순 정렬
let sortedUnion: [Int] = union.sorted() //.sorted
print(sortedUnion) // [1, 2, 3, 4, 5, 6, 7]

// 교집합
let intersection: Set<Int> = setA.intersection(setB) // .intersection
print(intersection) // [5, 3, 4]

// 차집합
let subtracting: Set<Int> = setA.subtracting(setB) // .substracting
print(subtracting) // [2, 1]
  • 멤버의 유일성이 보장되기 때문에 집합 연산에 활용하면 유용하다.

0개의 댓글