TID #3 (22.01.06)


0106
Schedule
1100気象
1100~1200:シャワーと食事
1200~1230:図書館出勤
1230 ~ 1400 : Spotify Clone Coding Lecture 1
1400 ~ 1550 : Spotify Clone Coding Lecture 2
1550–1610:散歩&間食補充
1610~1830:エレン・スウィフブカンプ講座
1830から1930:家に帰る&食事と休憩
1930-2100:水泳
2100~2130:新聞を読んで休む
2130~2200:休憩
2200-2300:エレン・スウィフト・ブカンプ講座
Total学習時間:7時間 
Feedback
遅く起きて残念でしたが、結構時間がかかった1日でした.
特にClone Codingは面白い
まだよくわかりませんが、ある日iOSを選んだと感じました.
早起きして泳いだり、図書館に出勤したりして、最後まで勉強すればいいです.
習慣をつけましょう.
Today I Learned
Spotify Clone Coding Link
Lecture 1
StoryBoardを削除し、AppDelegateとSceneDelegateを変更します.
画面を飾るように行われています.
이번 수업에서는 App/Scene Delegate에서 ViewController 들을 호출해,
ViewController 에서 세부 logic을 채움으로써 프로그램을 짜는데,
  • Large Title
  • SFシンボルをアプリケーションに入れる方法
  • 背景色を塗りつぶす方法
  • 田野を経験したことがある.
    
    > Lecture 2
    
    ```swift
    이번 수업에서는 Spotify API를 끌어다와서 Authorization 을 진행했다.
    우선 Authorization 화면을 AuthViewController를 수정함으로써 만들었고,
    Sptify API에 접근하여 URL을 parsing 해서 해당화면과 이어주었다.
    
    API를 활용하는 경험을 해볼 수 있었던 것 같은데,
    내 페이지에서는 강사의 화면 페이지를 접근할 수가 없어서 많이 헤메었다.
    エレンのSWIFTキャンプ
    Lecture 1
    1. argument Label
    func printName(first name: String){		
    		print("my name is \(name) !")
    }
    print(first: Han)
    ->firstをパラメータLabelと呼びます.
    関数呼び出し時に、どのようなパラメータが長く書けるのか、便利です!
    
    2. 와일드카드 패턴을 사용할 수도 있다.
    ```swift
    func addPrintFunction(_ firstNum: Int, _ secondNum: Int){
    	print(firstNum + secondNum)
    }
    
    addPrintFunction(3,4)
    
    -> 와일드카드 패턴을 사용해서 argument label 을 생략해서 사용할 수도 있다!!
    
  • 可変パラメータ
  • func arithmeticAverage(_ numbers: Double ...) -> Double{
    	var total = 0.0
    	for number in numbers {
    		total += number	
    	}
    
    	return total / Double(numbers.count)
    }
    
    arithmeticAverage(1)
    arithmeticAverage(1,3)
    arithmeticAverage(1.5,3.5,4.5) ....
    
    -> 함수의 파라미터가 몇 개인지 정해지지 않았을 때, type만 정해놓고서 argument들을 받는다
    	(Type) ... : 를 가변파라미터라고 한다.
  • 関数のパラメータにデフォルト値
  • を設定することもできます.
    func numFunction(num1: Int, num2: Int =5) -> Int{
    	var result = num1 + num2
    	return result
    }
    
    numFunction(num1: 3) -> 3+5return 될 것
    numFunction(num1: 3, num2: 7) -> 3+7return 될 것
    
    Ex : Print 함수도 기본값이 정해진 것과 똑같다.
    
    
    print("내용",separator:"",terminator:"\n") 
    
    print(items: Any ..., separator: String, terminator: String) 이 원형이다!
    
    -> 별다른 수정값이 들어오지 않으면 argument를 기본값으로 사용
    Lecture 2
    1.関数のパラメータを正しく理解する
    func someAdd(a: Int) -> Int{
    	//	let a 로 선언되어있음.
    	따라서 내부에서 var b = a 로 받아주는 방식으로 a값을 변경시킨다.
    }
    someAdd(a: 5)
    
    2. 함수 내의 변수의 scope(스코프)
    ```swift
    함수 내에서 선언한 변수의 Scope는 함수의 바디로 제한된다는 거. (당연)
  • returnキーワード
  • を正しく理解する
    함수를 호출하는 것은 자체로 표현식. 함수 내에서 return 나오면 함수 종료 (당연)
  • Nested Function
  • func chooseStepFunction(backward: Bool, value: Int) -> Int{
    	func stepForward(input: Int) -> Int{
    		return input +1
    	}
    
    	func stepBackward(input: Int) -> Int{
    		return input -1
    	}
    
    	if backward{
    		return stepBackward(input: value)
    	}
    	else{
    		return stepForward(input: value
    	}
    }
    
    Swift에서는 함수 내에 함수를 새로 정의해서 호출할 수도 있다.
    당연히 함수 내부에서만 살아있는 함수로 취급된다.
    Lecture 3
    1.関数表現
    doSomething(){
    	print("SomeThing")
    }
    var some=doSomething:関数を変数に格納できます.
    more()=doSomething():同じ動作
    ->関数記号
    1.パラメータがない場合:関数名を呼び出すだけです.
    2.パラメータがある場合:パラメータの値部分を消去します.
    Ex. addNumber(n num: Int){
    return n+1
    }
    addNumber(n:):関数を指します.
    3.パラメータラベル(ワイルドカードモード)を省略した場合:addPrintFunction(:).
    chooseStepFunction(後退:value:):chooseStepFunction-back-value関数
    と呼ぶ
    2. 함수 타입의 표기법
    ```swift
    var function1 = numberPrint(n:)
    
    
    var function1 : (Int) -> () = numberPrint(n:)
    				(Int) -> Void
    var function2 : (Int, Int) -> (Int) = numberPrint(n:) 
  • 関数の過負荷
    オーバーロード:オーバーロード(1つの関数の名前に複数の関数をオーバーロード)
  • func doSomething(value: Int){
    	print(value)
    }
    
    func doSomething(value: Double){
    	print(value)
    }
    
    
    func doSomething(value: String){
    	print(value)
    }
    
    
    func doSomething(value1: String, value2: String){
    	print(value1,value2)
    }
    
    
    func doSomething(value1: String, value2: Int){
    	print(value1,value2)
    }
    
    -> 함수 이름 하나에 여러 파라미터 형태가 대응되도록 오버로딩을 할 수 있다.
    
    컴파일러는 함수 이름, 파리미터 수/자료형, 아규먼트 레이블, 리턴형 등을 모두 포함해서 구분해준다.
  • 対正
  • Command + I 를 누르면, 컴파일러가 자동으로 줄을 맞춰준다.
    
  • 制御トランスポートゲート
  •  break
    continue
    fallthrough: switch 문에서 사용할 수 있다. 실행한 뒤 다음 케이스도 실행시켜줌.
    
    throw : 에러와 관련되어 있음
    Lecture 4
    1.関数が実行するメモリ構造
    システムプログラミングで学んだ内容は、画像でより簡単に学ぶことができます.
    Q.グローバル変数はどこに保存しますか?
    ->データ領域に格納します.(あ、そうだ!)
    コード:すべてのコードがメモリに格納され、1つずつ実行されます.
    データ:グローバル変数ストレージ/共有領域->スタックからアクセス可能
    お尻:
    スタックスタック:スタックフレーム/関数の範囲スタックフレームとデータ領域(外部からアクセス不可)スタックフレームとデータ領域
    if-else問:踊れ!
    戻ります.
    Lecture 5
    1.INOUTパラメータ
    Swift의 함수 내 파라미터는 기본적으로 call by value 형식이고 임시상수라서 변경 불가하다.
    But
    inoutキーワードは、関数で変数を直接変更するのに役立ちます.
    Call by Referenceの形で、切り上げが伝わります.原本伝達
    Pointerのようなコンセプト(copy-in,copy-out)
    func swapNumber(a: inout Int, b: inout Int){
    var temp = a
    a = b
    b = temp
    }
    swapNumber(a: &num1, b: &num2)
    INOUTキーを使用して可変パラメータとして宣言することはできません.
    
    2. Guard 문
    ```swift
    Swift에서만 유일한 조건문: if문이 여러개 있을 때 코드의 가독성이 문제되는 걸, 극복해줌.
    
    func checkNumbersOf1(password: String) -> Bool{
    
    	if password.count >=6{
    	}
    	else{
    		return false	
    	}
    	print("pass")
    }
    
    VS
    
    func checkNumbersOf2(password: String) -> Bool{
    
    	guard password.count>=6 else { return false }
    	print("pass")
    }
    
    statement 를 만족하지 않으면 먼저 else 문을 실행시킴.
    else 문 안에는 **early exit** 조건이 필요하다! ( return, throw, break, continue )
    함수에서 쓰일 경우 return,throw 가, 
    반복문에서 쓰일 경우 break, continue 가 
    반드시 들어가야 한다.
    
    가드문에서 선언된 변수를 아래 문장에서 사용가능함. 즉 동일한 스코프로 취급함.
    使用理由:
    (1)可読性の向上/問い合わせの不便の解消
    (2)複数の見張り人を安全に取り外すことができるタイプ-保留中
  • @Attributeキーワード:discadableResult
  • 선언에 추가정보 제공: Ex : @available
    타입에 추가정보 제공: Ex : @escaping
    등 @가 붙는 걸 Attribute 키워드라고 한다.
    
    func sayHello(){
    	print("안녕하세요")
    }
    
    func sayHelloString() -> String{
    	print("하이")
    	return "안녕하세요"
    }
    
    _ = sayHelloString() : 이렇게 해서 warning을 제거함 (~Swift ver4 패턴)
    
    @discardableResult
    func sayHelloString() -> String{
    	print("하이")
    	return "안녕하세요"
    }
    
    : 이 함수의 결과물은 버릴수도 있는 결과야! 라고 컴파일러에게 알려줌 -> waring 제거
    
    
  • APIは
    アプリケーションプログラミングインターフェースの略.
    アップルが事前に作成したAPI(内蔵関数)と、サーバと通信するために作成したAPIに分かれています.
    これにより、コード量を簡単に減らすことができる.