스파르타 코딩클럽 ios 앱개발 - 6일차 TIL

ILLHan Jung·2023년 7월 17일
0

숫자는 Int, Double, Float
참/거짓은 Bool
문자는 String, Character
다양한 값의 묶음은 Tuple로 표현할 수 있다

int : 정수를 표현하는 데이터

var age: Int = 18 // Int 타입

float : 소수점을 표현하는 데이터타입,32비트 부동소수를 표현할수있고 소수점이하 6자리까지가능

var interestRate: Float = 1.2345678910 // Float 타입
print("이자율은 \(interestRate) % 입니다")
// 출력값: 이자율은 1.2345679 % 입니다

double : 소수점을 표현하는 데이터타입, 64비트 부동소수를 표현할수있고 소수점이하 15자리이상 가능

var interestRate: Double = 1.2345678910123456789 // Double 타입
print("이자율은 \(interestRate) % 입니다")
// 출력값: 이자율은 1.2345678910123457 % 입니다

두 유형 모두 적합한 상황에서는 Double를 사용하는 것이 좋다

Bool : 참 , 거짓을 표현할수 있는 데이터타입

var isMan: Bool = true // Bool 타입

String : 문자열을 표현하는 데이터타입, 텍스트를 표현할수있음

var emptyString: String = "" 
var anotherEmptyString = String()  

var variableString = "Horse"
variableString += " and carriage"
print(variableString)
// 출력값: "Horse and carriage"

Character : 하나의 문자를 표현하는 데이터타입

let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
let catString = String(catCharacters)
print(catString)
// Prints "Cat!🐱"

Tuple : 여러값을 하나로 그룹화한 값,관련값의 단순한 그룹에 유용, 복잡한 데이터 구조를 만드는데 적합하지 않음

let http404Error: (Int, String) = (404, "Not Found")

let (justTheStatusCode, _): (Int, String) = http404Error
print("The status code is \(justTheStatusCode)")
// 출력값: "The status code is 404"

// 튜플 값에 접근하려면 순서를 알고 있어야 합니다.
print("The status code is \(http404Error.0)")
// 출력값: "The status code is 404"
print("The status message is \(http404Error.1)")
// 출력값: "The status message is Not Found"

// 각 엘레먼트에 이름을 붙일 수 있습니다.
let http200Status: (Int, String) = (statusCode: 200, description: "OK")

Any : 다양한 데이터 타입의 값을 수용,특정타입의 배열이 아니라 여러타입을 담을수있음! but Any 데이터형을 대입하려면 반드시 형 변환이 필요함

var anyArray: [Any] = [1,"Hi", true]

var anyValue: Any = 1000
anyValue = "어떤 타입도 수용 가능"
anyValue = 12345.67

// 컴파일 에러
let doubleValue: Double = anyValue  // 🚨 에러 메시지: Cannot convert value of type 'Any' to specified type 'Double'
// Any 타입에 Double 값을 넣는 것은 가능하지만
// Any는 Double 과 엄연히 다른 타입이 때문에
// Double 타입의 값에 Any 타입의 값을 할당할 때에는 명시적으로 타입을 변환해 주어야 합니다.
// 타입 변환은 이후 강의에서 배우니 타입 변환이 필요하구나까지 알고 계시면 됩니다!

Array : index는 0부터 시작, 처음에 선언할때 배열의 길이를 미리 지정안해도됨

// 생성자로 배열 만들기
var ages = Array<Int>()
print(ages)
// 출력값: []
var numbers = [Int]()
print(numbers)
// 출력값: []
var zeroes = [Int](repeating: 0, count: 10)
print(zeroes)
// 출력값: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

// 배열의 원소 개수
numbers = [5,6]
print("numbers 배열에 있는 value 개수는 \(numbers.count) 개 입니다")
// 출력값: "numbers 배열에 있는 value 개수는 1 개 입니다

// 배열 마지막에 value 추가하기
numbers.append(3)
// 현재 numbers = [5,6,3]

numbers[0] = 9
// 현재 numbers = [9,6,3]

numbers.insert(5, at: 1)
// 현재 numbers = [9,5,6,3]

let secondValue = numbers.remove(at: 1)
// 현재 numbers = [9,6,3]
// secondValue = 5

let lastValue = numbers.removeLast()
// 현재 numbers = [9,6]
// lastValue = 3

let firstValue = numbers.removeFirst()
// 현재 numbers = [6]
// firstValue = 9

// numbers 배열이 비었는지 확인
let isNoNumber = numbers.isEmpty
// isNoNumber = false

numbers.removeAll()
// 현재 numbers = []

// 배열 초기화
numbers = []
// 현재 numbers = []

Set : 집합이라고생각,순서를 정의하지않고 동일한 타입의값을 저장, 항목의 순서가 중요하지 않고 항목이 한번만 표시되도록 해야하는 경우 배열대신 집합을 사용할수 있다. 세트안에있는 모든 값은 유니크해야하므로 중복허용X

var letters = Set<String>()
// 값 넣기
letters.insert("Classical Music")

// 초기화
letters = []

var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
favoriteGenres = ["Rock", "Classical", "Hip hop"]

let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]

// 합집합
oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

// 교집합
oddDigits.intersection(evenDigits).sorted()
// []

// 차집합
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]

// 대칭 차집합
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]

Dictionary : 사전이라생각,순서정의하지않고 같은 타입의 key와 같은 타입의 value를 저장

  • key는 중복될 수 없습니다.
  • 모든 key는 같은 타입이어야 한다
  • 모든 value는 같은 타입이어야 한다
  • key와 value는 다른 타입이어도 한다
  • 실물 사전을 찾는 것처럼 순서가 아닌 식별자 기준으로 값을 찾을 때 Dictionary를 사용한다
var namesOfIntegers: [Int: String] = [:]

namesOfIntegers[16] = "sixteen"

// 초기화
namesOfIntegers = [:]

var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

airports["APL"] = "Apple International"
// airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin", "APL": "Apple International"]

// key에 매칭된 value 값 초기화
airports["APL"] = nil

// 딕셔너리 airports에 있는 값의 수
print(airports.count)
// 출력값: 2

// 딕셔너리 airports에 있는 모든 key들
print(airports.keys)
// ["YYZ", "DUB"]

// 해당 key가 있다면 value를 덮어쓰고, 덮어쓰기 전 기존값울 반환
let newYyz = airports.updateValue("Hello YYZ", forKey: "YYZ") 
           
print(newYyz) // 출력값: Optional("Toronto Pearson")
print(airports["YYZ"]) // 출력값: Optional("Hello YYZ")

// 해당 key가 없다면 그 key에 해당하는 value에 값을 추가하고 nil을 반환
let newApl = airports.updateValue("Hello APL", forKey: "APL") 

print(newApl) // 출력값: nil
print(airports["APL"]) // 출력값: Optional("Hello APL")

Enum(열거형) : 관련된 값으로 이루어진 그룹같은 타입을 선언해 타입 안전성을 보장하는법으로 코드를 다룰수있게 해줌

enum CompassPoint {
    case north
    case south
    case east
    case west
}

// 한 케이스 선언 방법
var directionToHead = CompassPoint.west
directionToHead = .east

// 활용 예시 1
directionToHead = .south
switch directionToHead {
case .north:
    print("북쪽")
case .south:
    print("남쪽")
case .east:
    print("동쪽")
case .west:
    print("서쪽")
}
// 출력값: "남쪽"

// allCases 
enum Beverage: CaseIterable {
    case coffee, tea, juice
}
let numberOfChoices = Beverage.allCases.count
print("\(numberOfChoices) 잔 주문 가능합니다.")
// 출력값: 3잔 주문 가능합니다```
profile
안녕하세요!

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

글이 잘 정리되어 있네요. 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

유익한 글 잘 봤습니다, 감사합니다.

답글 달기