์์ ๊ด๋ฆฌ, API Key ๊ด๋ฆฌ
enum
- ์ธ์คํด์ค ์์ฑ ๋ถ๊ฐ
- case rawValue → ์ค๋ณต ๋ถ๊ฐ
- static let → ์ฌ๋ฌ ๊ณณ์์ ์ ๊ทผ, ํ ๋ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ฉด ์ข ๋ฃ๋ ๋๊น์ง ๋จ์์์
struct
- ์ธ์คํด์ค ์์ฑ ๊ฐ๋ฅ
- ์ธ์คํด์ค ์์ฑ์ ๋ง์ผ๋ ค๋ฉด init()์ privateํ๊ฒ ์ ์ดํด์ฃผ๋ฉด ๋จ
URL Endpoint ๋ถ๋ฆฌํ๊ธฐ
์์ ์๋ ๋จ์ํ๊ฒ ํ์ ํ๋กํผํฐ๋ฅผ ์ด์ฉํด์ ์์ ๊ด๋ฆฌํ๋ ๊ฒ์ฒ๋ผ URL์ ๊ด๋ฆฌํ์๋๋ฐ ๋ค์๊ณผ ๊ฐ์ด enum์ ์ด์ฉํด์๋ URL์ ๊ด๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ๋ค. Endpoint๋ก ํ์ผ๋ช ์ ์ง๋ ๊ฒ์ ์ข์ ๊ฒ ๊ฐ๋ค. Moya๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, Alamofire ๋๋ URLSession์ ๋ชจ๋ํํด์ ์ฌ์ฉํ ๋๋ Endpoint๋ผ๋ ์ด๋ฆ์ผ๋ก ํ์ผ์ ๋ง๋ค๊ณ URL์ ๊ด๋ฆฌํ๋ ๊ฒ ๊ฐ๋ค.
enum EndPoint { case blog case cafe var requestURL: String { switch self { case .blog: return URL.makeEndPointString("blog?query=") case .cafe: return URL.makeEndPointString("cafe?query=") } } }
extension URL { static let baseURL = "https://dapi.kakao.com/v2/search/" static func makeEndPointString(_ endPoint: String) -> String { return baseURL + endPoint } }
ํ๋กํผํฐ
- ์ ์ฅ ํ๋กํผํฐ๋ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ด ์์ฑ๋ ์ ์๋ ๊ณณ์์ ์ฌ์ฉ ๊ฐ๋ฅ.
- ์ฐ์ฐ ํ๋กํผํฐ๋ ๋ฉ์๋์ฒ๋ผ ์ฌ์ฉ, ์ฌ์ฉํ๋ ๊ณณ์์ ์ ์ฅ ๊ณต๊ฐ ์ฐจ์ง.
๋คํธ์ํฌ ํธ์ถ
๋คํธ์ํฌ ํธ์ถ์ ํ๊ณ ๋ ํ Response๊ฐ ์ค๋ ์์ ์ ์ธ์ ์ธ์ง ์ ์ ์๋ค. ํ๋ฉด์ TableView ๋๋ CollectionView๊ฐ ๊ทธ๋ ค์ง ๋ ์์ง ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ชป ๋ฐ์์๋ค๋ฉด ํ๋ฉด์ ๊ทธ๋ฆด ๋ด์ฉ์ด ์์ ๊ฒ์ด๋ค. ํ๋ฉด์ ์ด๋ฏธ ๊ทธ๋ฆฐ ํ์ ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ค๊ณ ์๊ฐํด๋ณด์.
์ด๋ป๊ฒ ํด์ผ ํ ๊น? ๋ฐ์ดํฐ๊ฐ ์์ ํ ๋ฐ์์์ง ์์ ์ ํ๋ฉด์ ๋ค์ ๊ทธ๋ ค์ค ํ์๊ฐ ์๋ค. ๊ทธ๋ด ๋ ์ฌ์ฉํ๋ ๋ฉ์๋๊ฐ reloadData()์ด๋ค. reloadData()๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด ์์ดํ , ํ์ ๋ช ๊ฐ ๊ทธ๋ฆด์ง ์ด๋ค ์ ์ ๊บผ๋ด์ฌ๊ฑด์ง ๋ฑ๋ฑ์ ๋ํ ์์ ์ ๋ค์ ์ํํ๊ฒ ๋๋ค.
UITableView.AutomaticDimension
- ํ ์ด๋ธ ๋ทฐ ์ ์ ๋์ด ์กฐ์
- ๋ ์ด์์์ ์ ์ก์๋์์ผ ํ๋ค. ํนํ ์์๋, ๋์ด ๊ด๊ณ์ ๋ํด ์ค์ ์ด ์ ๋์ด์์ด์ผ ํ๋ค.
tableView.rowHeight = UITableView.automaticDimension
extension ViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { // ๋ถ๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํด์๋ ์กฐ์ ํ ์ ์๋ค. // ๋ ์ฐ์ ์ ์ผ๋ก ํธ์ถ๋๋ค. (๋ฉ์๋๊ฐ ์ฐ์ ํ๋ค. - viewDidLoad์์ ํธ์ถ๋๋ ๊ฒ๊ณผ ๋น๊ตํ์ ๋!!) return UITableView.automaticDimension } }
๋ง์ฝ์ ํน์ ์ ์ ๊ณ ์ ์ ์ธ ๋์ด๋ฅผ ์ฃผ๊ณ ์ถ๊ณ , ๋๋จธ์ง ์ ์ ์ ๋์ ์ผ๋ก ๋์ด๋ฅผ ์กฐ์ ํ๊ณ ์ถ๋ค๊ณ ํ๋ค๋ฉด Delegate method์์ ์ฒ๋ฆฌ๋ฅผ ํด์ค ์ ์๋ค. ์ด ๋ ํด๋น ๋ฉ์๋๊ฐ ์ฐ์ ์์๊ฐ ๋์์ ๋ ์ฐ์ ์ ์ผ๋ก ํธ์ถ๋๋ค.
์ ํ์ฅ, ์ถ์ ๊ตฌํํ๊ธฐ (Label ๊ธฐ์ค, ๊ฐ๋จํ UI)
Label์ numberOfLines ์์ฑ์ ์ด์ฉํด์ ์ ์ด ํ์ฅ, ์ถ์๋๋ ๋ฏํ UI๋ฅผ ๊ตฌํํด๋ณผ ์ ์๋ค.
var isExpanded = false // false๋ฉด 2์ค, true๋ฉด 0์ผ๋ก
์ฐ์ ๋ถ๊ธฐ์ฒ๋ฆฌ๋ฅผ ํด์ค ์ ์๋ Bool ํ์ ์ ๋ณ์๋ฅผ ํ๋ ์ ์ธํ๋ค.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = tableView.dequeueReusableCell(withIdentifier: "KakaoCell", for: indexPath) as? KakaoCell else { return UITableViewCell() } cell.testLabel.numberOfLines = isExpanded ? 0 : 2 cell.testLabel.text = indexPath.section == 0 ? blogList[indexPath.row] : cafeList[indexPath.row] return cell }
๊ทธ๋ฆฌ๊ณ cellForRowAt ๋ฉ์๋ ์ชฝ์์ ๋ณ์์ ๊ฐ์ ๋ฐ๋ผ์ numberOfLines ๊ฐ์ ์กฐ์ ํด์ฃผ๋ฉด ๋๋ค.
@IBAction func showTotalButtonTapped(_ sender: UIBarButtonItem) { isExpanded.toggle() tableView.reloadData() }
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ tableView๋ฅผ ๋ค์ ๊ทธ๋ ค์ฃผ๋ ์์ ์ด๋ค. ๊น๋จน์ง ๋ง์.
'๐ฑ SeSAC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SeSAC] 220810 TIL (0) | 2022.08.14 |
---|---|
[SeSAC] 220809 TIL (0) | 2022.08.12 |
[SeSAC] 220805 TIL (2) | 2022.08.10 |
[SeSAC] 220804 TIL (0) | 2022.08.10 |
[SeSAC] 220803 TIL (0) | 2022.08.10 |