Swift 2일차
Collection
Array
- 같은 타입의 Element만 담아야 한다.
- 순서가 존재한다.
var oddNumbers: [Int] = [1, 3, 5]
var oddNumbers2: Array<Int> = [1, 3, 5]
oddNumbers.append(7) // [1, 3, 5, 7]
oddNumbers.append(contentOf: [9, 11]) // [1, 3, 5, 7, 9, 11]
oddNumbers += [13, 15] // [1, 3, 5, 7, 9, 11, 13, 15]
oddNumbers.isEmpty // false
oddNumbers.count // 8
print(oddNumbers.first) // Optional(1)
print(oddNumbers.first!) // 1
oddNumbers = []
print(oddNumbers.first) // nil
if let firstElement = oddNumbers.first {
// oddNumbers.first가 nil이 아니면
...
}
oddNumbers.max() // 15
oddNumbers.min() // 1
oddNumbers[0...3] // [1, 3, 5, 7]
oddNumbers.contains(2) // false
oddNumbers.insert(21, at: 0) // [21, 1, 3...]
oddNumbers.remove(at: 0) // [1, 3...]
oddNumbers[0] = 21 // [21, 1, 3...]
oddNumbers[0...2] = [1, 2, 1] // [1, 2, 1, 7...]
oddNumbers.swapAt(1, 2) [1, 5, 3...]
for (index, value) in oddNumbers.enumerated() {
print(index, "&", value)
}
oddNumbers.dropFirst(3) // [7, 9, 11, 13, 15]
oddNumbers.dropLast(3) // [1, 3, 5, 7, 9]
oddNumbers.prefix(3) // [1, 3, 5]
oddNumbers.sufix(3) // [11, 13, 15]
Dictionary
- key(Unique)와 value로 구성된다.
- 순서가 없다.
var scoreDic: [String: Int] = ["A": 80, "B": 95, "C": 90]
var scoreDic2 : Dictionary<String, Int> = ["A": 80, "B": 95, "C": 90]
scoreDic["D"] // nil
if let score = scoreDic["E"] {
...
} else {
...
}
scoreDic.isEmpty
scoreDic.count
scoreDic["D"] = 75 // 추가
scoreDic["B"] = 100 // 수정
scoreDic["D"] = nil // 삭제
for (name, score) in scoreDic {
...
}
for key in scoreDic.keys
for value in scoreDic.values
var me: [String: String] = ["name": "다솔", "city": "경기도"]
func printMe(_ inputDic: [String: String]) {
if let name = inputDic["name"], let city = inputDic["city"] {
...
} else {
...
}
}
printMe(me)
Set
- 유일한 값을 가진다.
- 순서가 없다.
var testSet: Set<Int> = [1, 2, 3, 1, 2] // {1, 2, 3}
Closure
- 이름이 없는 Method
var multiplyClosure: (Int, Int) -> Int = { a, b in
return a * b
}
var multiplyClosure: (Int, Int) -> Int = { $0 * $1 }
funct operateTwoNum(a: Int, b: Int, c: (Int, Int) -> Int) -> Int {
return c(a, b)
}
operateTwoNum(a: 3, b: 7, c: multiplyClosure) // 21
operateTwoNum(a: 3, b: 7, c: { a, b in
return a + b }) // 10
let voidClosure: () -> Void = {
pirnt("IOS Developer")
}
voidClosure() // IOS Developer
- 즉, 함수와 공통점과 차이점이 존재한다.
- 이름과, fuc 키워드 유무가 다르다.
- 인자를 받고, 값을 리턴하고, 변수로 할당할 수 있고, First Class Type, Reference Type인 것은 같다.
- 함수는 Closure의 한가지 타입
- Global 함수
- Nested 함수
- Closure Expressions
// 1. Simple closure
let simpleClosure = {
}
simpleClosure()
// 2. code block
let exampleClosure1 = {
print("Hello Swift")
}
// 3. input parameter
let exampleClosure2: (String) -> Void = { name in
print("Hello \(name)")
}
// 4. return
let exampleClosure3: (String) -> String = { name in
let message = "Hello \(name)"
return message
}
// 5. parameter
func exampleClosure4(message: String, closure: () -> Void) {
print("함수에서 호출됨 : \(message)")
closure()
}
exampleClosure4(message: "메세지 내용", closure: { print("클로저에서 호출됨") })
// 6. Trailing closure
// 인자가 여러 개 있고 closure가 인자 중에 맨 마지막이면
exampleClosure4(message: "메세지 내용") { print("클로저에서 호출됨") }
First Class Type
- 변수에 할당할 수 있다.
- 인자로 받을 수 있다.
- 리턴할 수 있다.
- 예를 들어, Int 처럼.
Completion Block
어떤 태스크가 완료되면 클로저가 수행
네트워크를 통해 데이터를 받아오는 작업
언제 끝날지 모르는 비동기 처리
끝났을 때 돌아가는 블럭
Higher Order Functions
- 인자로 input을 함수로 받을 수 있는 유형의 함수
- 고개함수 : filter, reduce ...
Capturing Values
if true {
let numOutside = 3
if true {
let numInside = 5
print(numOutside, numInside)
}
print(numOutside, numInside) // ERROR
}
안쪽, 바깥쪽 scope
var count = 0
let incrementer = {
count += 1
}
for _ in 0...6 {
incrementer()
}
count // 7
{ (paramters) -> returnType in
statements
}
in
을 기준으로 한다.
Structure
관계가 있는 것들을 묶어서 표현.
Object = Data + Method
Object는 Structure와 Class로 나타낼 수 있다.
Structure | Class |
---|---|
Value Types | Reference Types |
Copy | Share |
Stack | Heap |
let pClass1 = PersonClass(name: "A", age: 5)
let pClass2 = pClass1
pClass2.name = "B" // 공유
pClass1.name // B
pClass2.name // B
let pStruct1 = PersonClass(name: "A", age: 5)
let pStruct2 = pStruct1
pStruct2.name = "B" // 복사
pStruct1.name // A
pStruct2.name // B
- 클래스 변수는 같은 인스턴스를 가리키고 있다.
- 구조체 변수는 기존의 인스턴스를 복사해서 새로운 인스턴스를 만든다.
가장 까까운 편의점 찾기
Author And Source
이 문제에 관하여(Swift 2일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@solda/Swift-2일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)