You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
● Int 변수 -> Character 변수 할당 시 컴파일 오류
● 타입 확인 : Swift가 컴파일 시 타입을 확인
타입 추론
● 변수나 상수를 선언할 때 타입을 명시하지 않아도 컴파일러가 할당 기준값으로 타입 결정
varname="myName" // 할당 값을 추론하여 String 타입 선언
name =100 // 오류 발생
타입 별칭
● 데이터 타입에 임의로 별칭 부여 가능
● 기본 타입 이름과 이후에 추가한 별칭 사용 가능
typealiasmyInt=InttypealiasyourInt=InttypealiasmyDouble=Doubleletage:myInt=20varyear:yourInt=2002varavg:myDouble= 81.6
//별칭에 입력된 타입으로 변수 타임 결정
튜플
● 타입의 이름은 없다
● 지정된 데이터의 묶음
● 타입 이름은 따로 없으므로 일정 타입의 나열만으로 튜플 타입을 생성
varperson:(String,Int,Double)=("my",20, 172.4)print(person.0, person.1 person.2) // "my", 20, 172.4 출력
person.1=30
person.2=170print(person.0, person.1 person.2) // "my", 30, 170 출력
/*
요소가 없으므로 판단하기 어렵다 그렇기 때문에 요소를 넣어주자!!
*/
-------------------------------------------------------------var person:(name: String, age: Int, height: Double)=("my",20, 172.4)print(person.name, person.age, person.height) // "my", 20, 172.4 출력
-------------------------------------------------------------
typealias Person =(name: String, age: Int, heghit: Double)letmy:Person=("my",20, 172.4)print(my) // 위와 같이 출력!!, 별칭으로 지정하여 튜플 사용할 수 있다.
배열
● 대괄호를 묶어 Array 타입을 표현
● firstIndex(of:) => 해당 요소의 인덱스 확인 가능
● append(_:) => 맨 뒤에 요소 생성
● insert(at:) => 중간에 요소 삽입
● remove(at:) => 해당 자리 요소 삭제 후 반환
● removeFirst => 첫 요소 삭제 후 반환
● removeLast => 마지막 요소 삭제 후 반환
varnames:Array<String>=["hello","hi","my","you"]-------------------------------------------------------------var names:[String]=["hello","hi","my","you"] // 위와 동일한 표현
-------------------------------------------------------------var emptyArray:[Any]=[Any]() // 빈 배열 생성
varemwptyArray:[Any]=Array[Any]() // 위와 같음
-------------------------------------------------------------print(names.firstIndex(of:"hi")) // hi가 있는 인덱스 출력 : 1
print(names.first) // 배열의 첫 요소 출력
print(names.last) // 배열의 마지막 요소 출력
-------------------------------------------------------------
let firstArray: String = names.removeFirst() // names 배열 첫 요소 반환 후 삭제
letlastArray:String= names.removeLast() // names 배열 마지막 요소 반환 후 삭제
letselectArray:String= names.remove(at:1) // 1 인덱스 요소 반환 후, 삭제
print(firstArray) // Hello
print(lastArray) // you
print(selectArray) // my
names.append(contentsOf:["max","min"]) // 마지막 자리에 max와 min 추가
names.insert("haha", at:2) // 인덱스 2의 자리에 haha 삽입
딕셔너리
● 딕셔너리 안의 키는 중복 불가능
● removeValue(forKey : ) => 키에 해당하는 값 반환 후, 삭제
typealiastypeDictionary=[String:Int] // 별칭으로 타입 표현 가능
-------------------------------------------------------------vartestDictionary:Dictionary<String,Int>=Dictionary<String,Int>() // 빈 딕셔너리 생성
-------------------------------------------------------------var testDictionary:[String: Int]=[String: Int]() // 위와 같은 표현
-------------------------------------------------------------
var testDictionary: typeDictionary =typeDIctionary() //위와 같은 표현
-------------------------------------------------------------var testDictionary:[String: Int]=[:] //위와 같은 표현
-------------------------------------------------------------var testDictionary:[String: Int]=["name":22,"hello":23]print(testDictionary.isEmpty()) // false
print(testDictionary.count()) // 2 출력
print(testDictionary.removeValue(forKey:"hello")) //23 출력 후. 삭제
print(tsetDictionary["hi", default:0]) // hi 키에 값이 없으면 default 값 출력
세트
● 순서가 중요하지 않거나 각 요소가 유일한 값
● 축약형이 없다
● insert(_:) => 요소 추가
● remove(_:) => 요소 삭제
● intersection() => 교집합
● symmetricDifference() => 여집합
● union() => 합집합
● subtraction() => 차집합
● isDisjoin(with: ) => 서로 배타적인지 확인
● isSubset(of: ) => 부분집합인지 확인
● isSuperset(of: ) => 전체집합인지 확인
varnames:Set<String>=Set<String>() //빈 집합 생성
-------------------------------------------------------------
var names: Set<String>=[] //위와 같음
-------------------------------------------------------------
var names: Set<String>=["hello","hi","bye"]
names.insert("good") // ["hello", "hi", "bye", "good"]
print(names.remove("hi")) // hi를 반환하고, 삭제
-------------------------------------------------------------
let korean: Set<String>=["one","two","three"]letnumber:Set<String>=["two","three"]lettestOne:Set<String>= korean.intersection(number) // 두 집합의 교집합 반환
lettestTwo:Set<String>= korean.symmetricDifference(number) //두 집합의 여집합 반환
lettestThree:Set<String>= korean.union(number) //두 집합의 합집합 반환
lettestFour:Set<String>= korean.subtraction(number) //두 집합의 차집합 반환
print(korean.isDisjoint(with: testTwo)) // true -> korean은 testTwo와 배타적?
print(number.isSubset(of: korean)) // true -> number는 korean의 부분집합?
print(testThree.isSuper(of: korean)) // true -> testThree는 korean의 전체집합?
컬렉션 임의의 요소 추출 및 뒤집기
● randomElement() => 임의 요소 출력
● shuffle() => 요소 임의로 섞기
vararray:[Int]=[1,2,3,4]varset:Set<Int>=[1,2,3,4]vardictionary:[String:Int]=["a":1,"b":2,"c":3."d":4]var string: String = "String"print(array.randomElement()) // 랜덤 요소 출력print(array.shuffled()) //뒤죽박죽된!! 배열 출력 => 자신의 요소는 그대로 새로운 컬렉션에 저장print(dictionary.shuffled()) // (키, 값) 튜플의 배열로 반환print(string.shuffled()) // 위치 array.shuffle() // 뒤죽박죽으로!! 섞기 => 자신의 요소 섞기set.shuffle() // 오류 발생, 집합은 순서가 없기 때문에 섞지 못한다.
열거형
● 제한된 선택지를 주고 싶을 때
● 정해진 값 외에는 입력받고 싶지 않을 때
● 예상된 입력 값이 한정되어 있을 때
● 스위프트의 열거형은 각 항목이 그 자체로 고유의 값이 될 수 있다
● rawValue라는 프로퍼티를 통해 원시값 사용 가능
enumSchool:String{case primary
case elementary
case middle ="중학교"case high
case college
case university
case graduate
}varhighestEducation:School=School.university
-------------------------------------------------------------
var highestEducation: School =.university // 위와 같은 표현
-------------------------------------------------------------
highestEducation =.graduate // 같은 열거형 내 항목으로 변경 가능
-------------------------------------------------------------
var middleSchool: School =.middle
print(middleSchool.rawValue) // 중학교 출력
-------------------------------------------------------------
let primary =School(rawValue:"중학교") // 원시값에 해당하는 열거형 할당
letgraduate=School(rawValue:"대학교") // nil
연관 값
● 소괄호를 사용하여 표현 할 수 있다.
● 열거형 내의 항목이 자신과 연관된 값을 가질 수 있다
● 열거형에 포함된 모든 케이스 알아야 할 때 사용한다.
● :CaseIterable 사용
● 열거형에 .allCases 사용
enumSchool:String,CaseIterable{case primary ="유치원"case middle ="중학교"case high ="고등학교"}letallCase:[School]=School.allCases // School 열거형의 값이 전부 입력된다.
순환 열거형
● 연관 값이 열거형 자신의 값이고자 할 때 사용
● indirect 키워드 사용
// 특정 항목에 순환 열거형
enumArithmaticExpression{case number(Int)indirectcase addition(ArithmaticExpression,ArithmaticExpression)indirectcase multiplication(ArithmaticExpression,ArihmaticExpression)}
// 열거형 전체 순화 열거형
indirectenumArithmaticExpression{case number(Int)case addition(ArithmaticExpression,ArithmaticExpression)case multiplication(ArithmaticExpression,ArihmaticExpression)}
열거형 비교
● Comparable 사용
enumalphabet:Comparable{case b
case a
case d
case c
}lettestOne:alphabet= alphabet.a
lettestTwo:alphabet= alphabet.b
if testOne > testTwo{print("testOne")}else{print("testTwo")} // b가 a보다 위에 있으므로 testTwo가 크다
enumDevice:Comparable{case galaxyPhone(version:String)case galaxyTab(version:String)case notebook
}vardevices:[Device]=[]
devices.append(Device.galaxyPhone(version:"22"))
devices.append(Device.notebook)
devices.append(Device.galaxyTab(version:"21"))letsortedDevice:[Device]= devices.sorted()print(sortedDevice)
// [Device.galaxyPhone(version: "22"), Device.galaxyTab(version: "21"),Device.notebook]