UITabBarController
를 사용하여 옵션을 선택합니다.tab bar
를 사용하면 사용자가 관심있는 항목을 탭하여 보고 싶은 화면을 제어할 수 있습니다.
UITabBarItem
Cell스타일이 Subtitle
인경우 textLabel.text
와 detailTextLabel.text
로 텍스트를 설정할 수 있습니다.
Codable
프로토콜을 채택하면 문자열, 딕셔너리 또는 구조체와 같은 스위프트 데이터를 인터넷을 통해 전송할 수 있는 데이터로 변환할 수 있습니다.
데이터가 Codable
을 준수한다고 하면 해당 데이터와 JSON간에 자유롭게 변환할 수 있습니다,
JSON
(JavaScript Object Notation
) 데이터를 설명하는 방법입니다. 컴퓨터용으로 분석하기 쉽기 때문에 대역폭이 중요한 온라인에서 자주 사용됩니다.
JSON 모델 작성
{
"metadata":{
"responseInfo":{
"status":200,
"developerMessage":"OK",
}
},
"results":[
{
"title":"Legal immigrants should get freedom before undocumented immigrants – moral, just and fair",
"body":"I am petitioning President Trump's Administration to take a humane view of the plight of legal immigrants. Specifically, legal immigrants in Employment Based (EB) category. I believe, such immigrants were short changed in the recently announced reforms via Executive Action (EA), which was otherwise long due and a welcome announcement.",
"issues":[
{
"id":"28",
"name":"Human Rights"
},
{
"id":"29",
"name":"Immigration"
}
],
"signatureThreshold":100000,
"signatureCount":267,
"signaturesNeeded":99733,
},
{
"title":"National database for police shootings.",
"body":"There is no reliable national data on how many people are shot by police officers each year. In signing this petition, I am urging the President to bring an end to this absence of visibility by creating a federally controlled, publicly accessible database of officer-involved shootings.",
"issues":[
{
"id":"28",
"name":"Human Rights"
}
],
"signatureThreshold":100000,
"signatureCount":17453,
"signaturesNeeded":82547,
}
]
}
responseInfo
에는 상태값이 포함됩니다. 200상태코드는 정상적인 상태를 의미합니다.results
배열안에 각각의 항목의 값들이 있습니다.JSON
에서는 정수는 따옴표를 감싸지 않습니다.💡 JSON모델을 구조체로 작성하면 memberwise initializer를 제공하기 때문에 편리합니다.
데이터 다운로드
override func viewDidLoad() {
super.viewDidLoad()
// let urlString = "https://api.whitehouse.gov/v1/petitions.json?limit=100"
let urlString = "https://www.hackingwithswift.com/samples/petitions-1.json"
if let url = URL(string: urlString) {
if let data = try? Data(contentsOf: url) {
// we're OK to parse!
}
}
}
JSON 파싱
func parse(json: Data) {
let decoder = JSONDecoder()
if let jsonPetitions = try? decoder.decode(Petitions.self, from: json) {
petitions = jsonPetitions.results
tableView.reloadData()
}
}
decode()
메서드를 사용하여 변환하도록 요청합니다.