Constraints
: label과 textView에 Constraints를 통해 여백을 줄 수 있음
JSON 보기 좋게 정리 해주는 사이트
Best JSON Viewer and JSON Beautifier Online
Online JSON Viewer, JSON Beautifier and Formatter to beautify and tree view of JSON data - It works as JSON Pretty Print to pretty print JSON data.
codebeautify.org
영화 API
영화진흥위원회 오픈API
제공서비스 영화관입장권통합전산망이 제공하는 오픈API서비스 모음입니다. 사용 가능한 서비스를 확인하고 서비스별 인터페이스 정보를 조회합니다.
www.kobis.or.kr
stack view
: 한줄로 나란히 정렬
import UIKit
// 식당 정보를 담고 있는 배열들
let image = ["1.png", "2.png", "3.png", "4.png", "5.png"] // 각 식당의 이미지 파일 이름
let name = ["식당1", "식당2", "식당3", "식당4", "식당5"] // 각 식당의 이름
let phone = ["010-1234-5678", "010-1324-5678", "010-4534-5678", "010-1234-7978", "010-1234-4578"] // 각 식당의 전화번호
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var table: UITableView!
// 섹션의 개수를 반환합니다. (고정된 값인 3을 반환합니다)
func numberOfSections(in tableView: UITableView) -> Int {
return 3
}
// 각 섹션별 행의 개수를 반환합니다. (고정된 값인 5를 반환합니다)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
// 특정 셀에 대한 설정을 반환합니다.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// 재사용 가능한 셀을 가져옵니다. (MyTableViewCell을 사용하도록 변경하였습니다)
// 시험문제
let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! MyTableViewCell
// 셀의 라벨에 행의 정보를 표시합니다. (임시로 indexPath를 표시하도록 변경하였습니다)
cell.myLabel.text = indexPath.description //name[indexPath.row]
return cell
}
// 특정 행이 선택되었을 때 실행되는 메서드입니다.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// 선택된 행의 정보를 콘솔에 출력합니다.
print(indexPath.description)
}
override func viewDidLoad() {
super.viewDidLoad()
// 테이블 뷰의 델리게이트와 데이터 소스를 현재 ViewController와 연결합니다.
table.delegate = self
table.dataSource = self
}
}
업캐스팅(Upcasting):
- 업캐스팅은 서브클래스의 객체를 슈퍼클래스 타입으로 변환한다.
- 보다 일반적인(슈퍼클래스) 형태로 객체를 다룰 수 있다.
- 예를 들어, 강아지(Dog) 클래스가 동물(Animal) 클래스의 서브클래스일 때, 강아지 객체를 동물 타입으로 캐스팅하는 것이 업캐스팅이다.
다운캐스팅(Downcasting):
- 다운캐스팅은 슈퍼클래스 타입의 객체를 서브클래스 타입으로 변환하는 것이다.
- 좀 더 구체적인(서브클래스) 형태로 객체를 다룰 수 있다.
- 예를 들어, 동물(Animal) 클래스 타입의 객체를 강아지(Dog) 클래스 타입으로 변환하는 것이 다운캐스팅이다.
class Animal {}
class Dog: Animal {}
// myDog에 Dog의 인스턴스를 할당합니다.
let myDog: Dog = Dog()
// myDog를 Animal 타입으로 할당합니다. (업캐스팅)
let myAnimal: Animal = myDog
// 모든 강아지는 동물이기 때문에 이것은 안전합니다.
// someAnimal 변수에 Dog의 인스턴스를 할당합니다.
let someAnimal: Animal = Dog()
// 이제 someAnimal의 타입은 Dog입니다.
print(type(of: someAnimal)) // Dog
// someAnimal을 Dog 타입으로 다운캐스팅합니다.
let x = someAnimal as? Dog
// as?는 안전한 옵셔널로 반환되며, 실패할 경우 nil을 반환합니다.
print(type(of: x)) // Optional<Dog>
// someAnimal을 안전하게 다운캐스팅하고, 성공할 경우 해당 개체를 사용합니다.
if let someDog = someAnimal as? Dog {
print(type(of: someDog)) // Dog
} else {
print("Downcasting 실패")
}
// someAnimal을 강제적으로 Dog 타입으로 다운캐스팅합니다.
let anotherDog = someAnimal as! Dog
// 만약 someAnimal이 Dog의 인스턴스가 아니라면 런타임 오류가 발생합니다.
print(type(of: anotherDog)) // Dog
옵셔널 체이닝
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let kim: Person = Person(name: "Kim", age: 20)
let han: Person? = Person(name: "Han", age: 25)
// han이 옵셔널 타입이므로 접근할 때 옵셔널 체이닝을 사용합니다.
// 만약 han이 nil이면 age에 접근하지 않고 바로 nil을 반환합니다.
print(han?.age) // Optional(25)
// 옵셔널 체이닝을 통해 옵셔널 값을 언래핑하여 접근합니다.
// 만약 han이 nil이면 nil을 반환합니다.
print((han?.age)!) // 25
// 옵셔널 바인딩을 사용하여 옵셔널 값을 안전하게 처리합니다.
// han이 nil이 아니고, age에 값이 있다면 그 값을 hanAge에 할당합니다.
if let hanAge = han?.age {
print(hanAge) // 25
} else {
print("nil")
}
옵셔널 언래핑하는 다양한 방법
// x 변수를 선언합니다. 이 변수는 옵셔널 타입이며, 초기값으로 "Hi"를 가집니다.
var x: String? = "Hi"
// x 변수와 x 변수를 강제 언래핑한 값을 출력합니다.
print(x, x!) // 출력: Optional("Hi") Hi
// 옵셔널 바인딩을 사용하여 x 변수가 nil이 아닌 경우에만 a 변수에 값을 할당하고 출력합니다.
if let a = x {
print(a) // 출력: Hi
}
// x 변수를 강제 언래핑하여 문자열의 길이를 가져옵니다.
let b = x!.count
print(type(of: b), b) // 출력: Int 2
// 옵셔널 체이닝을 사용하여 x 변수가 nil이 아닌 경우에만 문자열의 길이를 가져옵니다.
let b1 = x?.count
print(type(of: b1), b1, b1!) // 출력: Optional<Int> Optional(2) 2
// nil 병합 연산자를 사용하여 x 변수가 nil인 경우 기본값으로 빈 문자열을 할당하고 c 변수에 저장합니다.
let c = x ?? ""
print(c) // 출력: Hi (x 변수가 nil이 아니므로 "Hi" 출력)
'iOS' 카테고리의 다른 글
[iOS] OpenAPI 영화순위 앱 만들기 (2) (0) | 2024.05.09 |
---|---|
[iOS] OpenAPI 영화순위 앱 만들기 (1) (0) | 2024.05.02 |
[iOS] 옵셔널, 함수, 메서드 (0) | 2024.03.28 |
[Ios] 무드등 만들기 (0) | 2024.03.14 |
[iOS] Swift 문법 리뷰 (0) | 2024.03.07 |