๐ŸŒฑ SeSAC

[SeSAC] 220808 TIL

taeeekki 2022. 8. 12. 17:28

์ƒ์ˆ˜ ๊ด€๋ฆฌ, 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๋ฅผ ๋‹ค์‹œ ๊ทธ๋ ค์ฃผ๋Š” ์ž‘์—…์ด๋‹ค. ๊นŒ๋จน์ง€ ๋ง์ž.