주니곰의 괴발노트
SeSAC TIL - 22.07.07 본문
1. 오늘 배운 내용
- 옵셔널(Optional)에 대한 내용, 이에 따른 처리 방법 등에 대해 배웠습니다.
- 함수에 대해 배우고 새로 생성하여 사용해보았습니다.
- 함수의 매개변수를 기능을 활용해 UI를 구성해보았습니다.
- 실물기기로 프로젝트를 구동해보았습니다.
2. Checklist
2-1. Cocoa Touch Framework
UIKit, Foundation, CoreData, MapKit, CoreAnimation 등을 포함하고 있는 애플기기를 통해 구동되는 App을 개발하기 위해 사용하는 통합 Framework입니다.
2-2. BreakPoint
현재 작성하고 있던 코드에 있는 버그를 확인하려고 할 때, 특정 위치에 BreakPoint를 생성하여 사용합니다. 이때, 디버거는 정지하며 다시 정상적으로 사용하려고 할 때는 표시되어 있는 breakpoint를 오른쪽 클릭 후, 삭제합니다.
2-3. Function Vs Method
둘 다 재활용이 가능하나 메서드는 클래스, 구조체, 열거형 등에 속하는 반면, 함수는 그 어디에도 속하지 않습니다. 다시 말해 메서드는 클래스, 구조체, 열거형 타입과 연관된 함수입니다. 모든 메서드는 함수이지만, 모든 함수는 메서드가 아닙니다.
함수는 특별한 기능을 하는 코드의 묶음이며 함수를 호출하여 실행합니다. 특정 타입 밖에 있는 파일은 public 함수에 접근할 수 있으며 함수 내부 데이터에 접근 가능합니다. 반면 메서드는 특정 타입 내에서 주어진 특정 유형의 인스턴스로 실행하기 위한 특정 작업과 기능을 캡슐화합니다.
2-4. Parameter Vs Argument
파라미터는 메서드 내부에 정의 된 변수이고 메서드가 호출될 때, 아규먼트는 메서드의 파라미터에 데이터를 전달합니다.
public void MyMethod(string myParam) { }
...
string myArg1 = "this is my argument";
myClass.MyMethod(myArg1);
2-5. Argument Label Vs Parameter Name
아규먼트 레이블은 함수를 호출하여 코드를 실행할 때 외부에 보여지는 이름이고 파라미터 이름은 함수 내부에서 사용되어져서 데이터를 전달하는 역할을 합니다. (newName: Argument Label, name: Parameter Name)
var myName = "a"
func naming (newName name: String) {
myName = name
}
naming(newName: "b")
2-6. Wildcard Pattern
아큐먼트 레이블을 생략하려고 할 때 사용합니다. 언더바(_) 로 사용하며 외부에서 파라미터 이름이 보여지지 않습니다.
var myName = "a"
func naming (_ name: String) {
myName = name
}
naming("b")
2-7. Optional
옵셔널은 nil값을 포함한 것을 의미합니다. 이 데이터를 사용할 때는 반드시 옵셔널을 벗겨낸 후 사용해야 합니다.
!: 옵셔널을 강제추출할 때 사용하며(ex. 변수!) nil값이 전달될 경우 에러가 발생하니 사용 시 각별한 주의를 요합니다.
?: nil값을 포함할 때 사용합니다.
Optional Chaining: 어떤 변수, 메서드, 서브스크립트 등이 옵셔널이고 이를 호출할 때 사용하는 프로세스입니다. 호출했을 때 값이 담겨져 있을 때 성공적으로 호출이 되나, nil값일 때는 nil을 리턴합니다.
var name: String? = "a"
// 1. 강제추출
name!
// 2. nil 확인 후 강제추출
if name != nil {
name!
} else {
// 에러전달
}
// 3. if let / guard let 바인딩으로 제거(주로 사용)
if let nickname = name {
// 정상작업
}
guard let nickname = name else { return }
// 이후 정상작업
// 4. Nil Coalescing
name ?? "default name"
2-8. Any
함수 타입을 포함한 모든 타입을 담을 수 있는 타입입니다. Any는 프로토콜이 아닙니다.
2-9. Outlet Collection
IBOutlet의 콜렉션이며 내부 값들의 순서는 정렬되어 있지 않을 수 있습니다. 대략적으로 컬렉션과 IBOutlet들이 연결되는 순서대로 나타나지만 각 Xcode 버전별로 그렇지 않다는 리포트가 많이 있습니다. 그리고 변수에 대해 어떤 타입이 선언되든간에, IBOutletCollection은 항상 NSArray입니다.
3. 과제 및 실습
LED보드 만들어보기(return 키를 입력시 키보드 내려가도록 구현, 뷰의 isHidden 표현)
- 스토리보드로 대략적인 UI구성 후 코드로 세부항목 설정
override func viewDidLoad() {
super.viewDidLoad()
designButtons(sendButton, "전송", "빨리보내", .yellow)
designButtons(textColorButton, "색상", "변경해", .green)
designTextField()
}
func designTextField() {
userTextField.placeholder = "내용을 작성해주세요"
userTextField.text = "안녕하세요"
userTextField.keyboardType = .emailAddress
userTextField.font = .systemFont(ofSize: 15)
userTextField.borderStyle = .none
userTextField.textColor = .blue
}
func designButtons(_ buttonName: UIButton, _ buttonTitle: String, _ highlightedTitle: String, _ bgColor: UIColor) {
buttonName.setTitle(buttonTitle, for: .normal)
buttonName.setTitle(highlightedTitle, for: .highlighted)
buttonName.backgroundColor = bgColor
buttonName.layer.cornerRadius = 8
buttonName.layer.borderColor = UIColor.black.cgColor
buttonName.layer.borderWidth = 3
buttonName.setTitleColor(.red, for: .normal)
buttonName.setTitleColor(.blue, for: .highlighted)
}
- 전송버튼을 눌렀을 때 텍스트필드 내용을 아래 레이블에 입력
@IBAction func sendButtonClicked(_ sender: UIButton) {
resultLabel.text = userTextField.text
}
- UITapGestureRecognizer를 활용, 루트뷰를 클릭했을 때 뷰를 숨기기 및 키보드 내리기
@IBAction func tapGestureClicked(_ sender: UITapGestureRecognizer) {
if userTextField.isEditing {
textView.isHidden = false
} else {
textView.isHidden.toggle()
}
view.endEditing(true)
}
- 가상키보드 return버튼 눌렀을 때 키보드 내리기
@IBAction func textFieldEdited(_ sender: UITextField) {
view.endEditing(true)
}
4. 자료 출처
구글 검색어: cocoa touch framework -> https://babbab2.tistory.com/51
구글 검색어: break point in xcode -> https://developer.apple.com/documentation/xcode/setting-breakpoints-to-pause-your-running-app
구글 검색어: difference between function and method in swift -> https://www.geeksforgeeks.org/swift-difference-between-function-and-method/
구글 검색어: difference between parameter and argument in swift -> https://stackoverflow.com/questions/156767/whats-the-difference-between-an-argument-and-a-parameter
구글 검색어: optional chaining in swift -> https://docs.swift.org/swift-book/LanguageGuide/OptionalChaining.html
구글 검색어: any type in swift-> https://cocoacasts.com/what-is-any-in-swift
구글 검색어: outlet collection in swift-> https://abhimuralidharan.medium.com/what-is-an-iboutletcollection-in-ios-78cfbc4080a1
'기타' 카테고리의 다른 글
SeSAC TIL - 22.07.11 (0) | 2022.07.17 |
---|---|
SeSAC TIL - 22.07.08 (0) | 2022.07.17 |
SeSAC TIL - 22.07.06 (0) | 2022.07.13 |
SeSAC TIL - 22.07.05 (0) | 2022.07.13 |
SeSAC TIL - 22.07.04 (0) | 2022.07.13 |