let name: type = value
var name: type = value
값의 타입이 명확하다면 타입은 생략 가능!
let name = value
var name = value
let constant : String = "차후에 변경이 불가능한 상수 let"
var variable : String = "차후에 변경이 가능한 변수 var"
variable = "변수는 이렇게 차후에 다른 값 할당 가능"
// constant = "상수는 차후에 값을 변경할 수 없습니다" // 오류발생
let sum: Int
let inputA: Int = 100
let inputB: Int = 200
// 선언 후 첫 할당
sum = inputA + inputB
// sum = 1 // 그 이후에는 다시 값을 바꿀 수 없습니다, 오류발생
// 변수도 물론 차후에 할당하는 것이 가능합니다
var nickName: String
nickName = "yagom"
// 변수는 차후에 다시 다른 값을 할당해도 문제가 없지요
nickName = "야곰"
## 데이터 타입
let implicitInteger = 70
let implicitInteger = 70.0
데이터 타입 지정 없이 선언하면 컴파일러가 타입을 유추하여 Int형,Double형으로 파악
let explicitDouble: Double = 70
데이터 타입을 Double형으로 지정해서 70을 할당하여도 타입은 Double형
var someAny : Any = 100
someAny = "어떤 타입도 수용 가능"
someAny = "90.5"
Any는 어떠한 타입으로 사용 가능.
let label = "The width is"
let width = 94
let widthLabel = label + String(width)
값을 절대 다른 유형으로 암시적으로 변화 불가.
바꾸기 위해선 위처럼 String으로 타입을 표시
마지막 줄 String 제거시 에러 발생.
let widthLabel = label + String(width) 처럼 표현하는 것 이외에 ()으로 표현이 가능.
let apples = 3
let oranges = 5
let appleSummary = "I have \(apples) apples."
let fruitSummary = "I have \(apples + oranges) pieces of fruit."
여러 줄을 표시하기 위해선 (""") 표시를 사용.
let quotation = """
i said "I have \(apples) apples."
And then i said "I have \(apples + oranges)
pieces of fruit."""
빈 Int Array 생성
var integers : Array<Int> = Array<Int>() // []
integers.append(1) //[1]
integers.append(100) //[1,100]
integers.contains(100) //true
integers.contains(99) //false
integers.remove(at:0) //index가 0인 값을 제거하고 return 1
integers.removeLast() //100
integers.removeAll() //모든 값들을 제거 []
integers.count //배열의 길이 return 0
//배열을 포현하는 다른 방법
var doubles:Arrays<Double> = [Double]()
var String : [String] = [String]()
var characters : [Character] = []
//let을 사용하여 불변한 Arrays append,remove 같은 함수 사용 불가.
let immutableArray = [1,2,3]
Key가 String 타입이고 Value가 Any인 빈 Dictionary 생성
var anyDictionary : Dictionary<String,Any> = [String:Any]()
anyDictionary["someKey"] = "value" // return "value"
anyDictionary["anotherKey"] = 100 // return 100
anyDictionary // ["someKey : "value","anotherKey":100]
anyDictionary["someKey"] = "dictionary" // return "dictionary"
anyDictionary // ["someKey : "dictionary","anotherKey":100]
anyDictionary.removeValue(forkey:"another") // 해당하는 key set remove.
anyDictionary["someKey"] = nil // somekey에 해당하는 set 제거.
anyDictionary// [:]
let emptyDictionary : [String:String] = [:]
let initalizeDictionary : [String:String] = ["name":"doyun","gender":"male"]
emptyDictionary["key"] = "value" // let이므로 에러 발생.
let someValue : String = initalizeDictionary["name"] // 에러 발생 optional 에서 확인.
빈 Int Set 생성
var integerSet : Set[Int] = Set<Int>()
integerSet.insert(1) // return inserted true, memberAfterInsert(1)
integerSet.insert(100) // return inserted true, memberAfterInsert(1)
integerSet.insert(99) // return inserted true, memberAfterInsert(1)
integerSet.insert(99) // return inserted false, memberAfterInsert(1)
integerSet.insert(99) // return inserted false, memberAfterInsert(1)
set은 중복된 값을 갖지 않으므로 중복된 값이 insert 호출 되었을 때 false값을 return 한다.
integerSet
integerSet.contains(1) // true
integerSet.contains(2) // false
contains 메소드는 Set에 원소를 가지고 있는지 확인.
integerSet.remove(100) //100
integerSet.removeFirst() //99
integerSet.count //1
remove 메소드는 제거, count는 Set의 크기.
let setA: Set = [1, 2, 3, 4, 5]
let setB: Set = [3, 4, 5, 6, 7]
// 합집합
let union: Set = setA.union(setB)
print(union) // [2, 4, 5, 6, 7, 3, 1]
// 합집합 오름차순 정렬
let sortedUnion: [Int] = union.sorted()
print(sortedUnion) // [1, 2, 3, 4, 5, 6, 7]
// 교집합
let intersection: Set = setA.intersection(setB)
print(intersection) // [5, 3, 4]
// 차집합
let subtracting: Set = setA.subtracting(setB)
print(subtracting) // [2, 1]