그 동안 강의 들으면서 나온 문법들 모음
- Comment: // 한줄 (command+/) , /* 여러줄 */
-
Tuple : 좌표 처럼 여러개의 변수값을 묶어서 정의 할 수 있는 변수
let coordinates = (4, 6) let x = coordinates.0 let y = coordinates.1
let coordinateNamed = (x: 2, y: 3) let (x2, y2) = coordinateNamed
-
Boolean: True, False
let value = 조건 or true/false
let value = num1 == num2
let yes = true let no = false
let compareTwoNums = num1 > num2 if compareTwoNums { print("True") } else { print("False") }
-
삼항 연산자
let message: sring if 조건 { message = "A" } else message = "B" } print(message) // 삼항연산자로 변환 let message = 조건 ? "A" : "B" print(message)
- Method vs Function
- 두 가지 모두 기능을 수행하는 함수이나, obeject에 속하여 기능을 수행하는 함수를 Method라고 칭함.
- 함수 선언 및 호출
//no parameter
func printName(){
let name = "Daye"
print(name)
}
printName()
//with 2 parameters
func compareNum(num1: Int, num2: Int){
num1 > num2
}
//external name: 외부에서 함수를 호출할 때 파라미터의 이름
// 호출 시 별도의 이름을 쓰지 않으려면 "_"로 표현
//internal naem: 함수 내부에서 변수로서의 이름
//value Type: 자료형
//parameter default 값 설정 가능(internalName = 10)
//return Type: 반환값의 자료형, 반환값이 없으면 생략 가능
func functionName(externalName internalName: valueType) -> returnType{
}
functionName(externalName: 100)
//return값이 있는 경우
func totalNum(num1: Int, num2: Int) -> Int{
let total = num1 + num2
return total
}
let result = totlaNum(10,300)
print(result)
- Overload: 같은 이름의 함수를 다른 파라미터를 가지도록 선언하는 기능
func function(num: Int)
func function(num: Double)
func function(number: Int)
- In-out parameter
//Swift에서 모든 파라미터는 constant이기 때문에 값을 변경할 수 없음.
//값을 변경하고 싶을 때에는 파라미터를 in-out으로 선언
func inrementAndPrint(_ value: inout Int){
value +=1
print(value)
}
- 함수를 파라미터로 사용하기
func add(_ a: Int, _ b: Int) -> Int{
return a + b
}
func subtract(_ a: Int, _ b: Int) -> Int{
return a - b
}
func printResult(_ function: (Int, Int)-> Int, _ a: Int, _ b: Int){
let result = function(a,b)
print(result)
}
printResult(add, 10, 5)
printResult(subtract, 10, 5)
- Optional: 값을 가지고 있지 않은 변수를 할당하기 위한 기능 (? nil)
var carName: String?
carName = nil
carName = "benz"
var actorName: String? = nil
let num = Int("10") // num은 Int?(optional integer)
- 고급 기능 4가지
- Forced unwrapping: 변수명! Optional 변수에서 실제 값만 꺼내서 사용하는 기능
var carName: String? = "benz" print(carName) // Optional("benz") print(carName!) // benz
- Optional binding (if let)
if let unwrappedCarName = carName { print(unwrappedCarName) } else { print("No value") }
- Optional binding (guard)
func printParsedInt(from: String) { guard let parsedInt = Int(from) else { print("Can't covert Int") return //조건에 맞지않으면 바로 탈출 } print(parsedInt) }
- Nil coalescing
let myCarName: String = carName ?? "benz" // carName의 값이 nil면 default 값인 benz를 넘겨줌
- Array
- Array에 담긴 값들은 있을 수도 없을 수도 있기 때문에 모두 Optional임.
var evenNumbers: [Int] = [2, 4, 6, 8]
var evenNumbers2: Array<Int> = [2, 4, 6, 8]
evenNumbers.append(10)
evenNumbers += [12, 14, 16]
evenNumbers.append(contentsOf: [18, 20])
//Array Methods
let isEmptyArray = evenNumvers.isEmpty //Array가 비어있는지 알아보는 메소드(Boolean type)
evenNumbers.count //Array에 담긴 값의 개수 반환
evenNumbers.min()
evenNumbers.max() //Array의 최대, 최소값 반환
evenNumbers.first //Array의 첫번째 값(evenNumbers[0])
let oneToThree evenNumbers.[0...2] //0 ~ 2번째 값 반환(Array)
evenNumbers.contains(3) //Array에 3이 있는지 확인(Boolean)
evenNumbers.insert(0, at:0) //0번째 인덱스에 0을 삽입
evenNumbers.remove(at:0) //0번째 인덱스에 있는 값 삭제
evenNumbers.removeAll() //Array 값 비우기(evenNumbers=[])
evenNumbers.swapAt(0,10) //0번째와 10번째 값 swap
evenNumbers.dropFist(3)
evenNumbers.dropLast(3) //Array 값에 반영하지 않고 앞or뒤에서 n번째 값을 지운 Array 반환
for num in evenNumbers{
print(num)
}
for (index, num) in evenNumbers.enumerated() {
print("idx: \(index), value: \(num)")
}
//idx: 0, value: 2
//idx: 1, value: 4
//.
//.
//.
-
- Dictionary
- Key와 Value의 쌍으로 이루어진 자료형. 순서가 없음.
var scoreDic: [String: Int] = ["Daye": 90, "JJong": 80]
var scoreDic2: Dictionary<String, Int> = ["Daye": 90, "JJong": 80]
scoreDic["Daye"] // 90
scoreDic["ryan"] //nil
if let score = scoreDic["Daye"]{
print(score)
} else {
print("no score")
}
scoreDic=[:] //Dictionary 비우기
scoreDic["Daye"] = 100 //값 없데이트
scoreDic["apeach"] = 100 //추가
scoreDic["apeach"] = nil //삭제
for (name, score) in scoreDic{
print("\(name), \(score)")
}
for key in scoreDic.keys{
print(key)
}
- Struct
struct Location {
let x: Int
let y: Int
let name: String
}
let store1 = Location(x: 10, y: 30, name: "Gyeonggi")
-
- Protocol
-
최소한으로 가져야 할 속성이나 메소드를 정의
-
- Set
-
중복이 없는 unique한 값들을 관리할 때 사용
var someSet: Set<Int> = [1, 2, 3, 1] //1은 중복이므로 삭제되고 저장 됨 [2, 3, 1] //Set에서 활용가능한 methods someSet.isEmpty someSet.count someSet.contains(4) someSet.insert(5) someSet.remove(1)
-
- Closure
-
이름이 없는 method
var multiplyClosure: (Int, Int) -> Int = { $0 * $1 } var multiplyClosure: (Int, Int) -> Int = { a, b in return a * b } //Closure Expression Sytanx //Closure expression syntax has the following general form: {(parameters) -> returnType in statements }
- Capturing Value
- Closure에 의해 잡혀서 외부 scope에서도 사용할 수 있게된 변수
let voidClosure: () -> Void = { print("hello closure") } var count = 0 let incrementer = { count += 1 }
-
- First class type
-
변수에 할당할 수 있는 것, 인자로 받을 수 있는 것, 리턴 할 수 있는 것.
- Completion Block: 수행 과정이 완료됨과 동시에 코드를 수행 하도록 하는 것
-
Higher Oder Functions(고개함수): 파라미터를 함수로 받을 수 있는 함수
-
- table view
-
여러 아이템을 리스트 형태로 표현할 때 사용하는 object
-
- Protocol
-
어떤 서비스를 사용하기 위해 명시해 놓은 해야 할 일
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate{ } //UITableViewDataSource: table view의 셀이 몇개, 어떻게 보여줄지 //UITableViewDelegate: table view 클릭시 이벤트
-
- Type Casting
-
Type casting은 instance의 type을 확인하거나 instance의 type을 super class 혹은 sub class type처럼 다루기 위해 사용.
-
is, as 연산자로 구현하며 두 연산자는 값의 타입을 확인하거나 다른 type으로 변환하는 용도
*class: 붕어빵 틀, instance: 붕어빵