Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

iOS 프로그래밍 실무 13주차 정리 본문

2-1/iOS프로그래밍 실무

iOS 프로그래밍 실무 13주차 정리

김브래 2023. 5. 31. 21:08

- 과제 -

 

func multiplyByTen(value: Int) {

print(value*10)

}multiplyByTen(value: 3) //30

 

강제 언래핑

 

func multiplyByTen(value: Int?) {

print(value!*10) //강제 언래핑

}multiplyByTen(value: 3) //30

 

if let 옵셔널 바인딩

 

func multiplyByTen(value: Int?) {

if let value{

print(value*10) //if let 옵셔널 바인딩

}}multiplyByTen(value: 3) //30

 

func multiplyByTen(value: Int?) {

if let value{

print(value*10) //if let 옵셔널 바인딩

}else

{ print("닐리리야")

}}multiplyByTen(value: nil) //닐리리야

 

guard let ~ else 옵셔널 바인딩

 

func multiplyByTen(value: Int?) {

guard let value else{

print("nil")

return

}print(value*10)

}multiplyByTen(value: 3)

multiplyByTen(value: nil)

 

스위프트 prepare메소드에서 indexpath.row를 알아내는 법이 뭐니

 

ChatGPT

Swiftprepare(for:sender:) 메서드에서 indexPath.row를 알아내려면 해당 메서드가 호출되는 시점에서 sender 매개변수를 사용하여 indexPath를 추출해야 합니다.

 

일반적으로 prepare(for:sender:) 메서드는 UIStoryboardSegue 객체를 전달받는데, 이 객체는 sourcedestination 뷰 컨트롤러를 가지고 있습니다. sender 매개변수를 통해 해당 세그웨이를 시작시킨 객체를 확인하고 적절한 처리를 할 수 있습니다.

 

sender 매개변수를 적절한 타입으로 다운캐스팅한 후 해당 객체의 정보를 사용하여 indexPath를 추출할 수 있습니다. 예를 들어, senderUITableViewCell인 경우 다음과 같은 방법으로 indexPath를 얻을 수 있습니다:

 

swift

Copy code

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

if let cell = sender as? UITableViewCell,

let indexPath = tableView.indexPath(for: cell) {

let row = indexPath.row

// row를 사용하여 필요한 작업 수행

}

}

여기서 tableView는 현재 작업 중인 테이블 뷰를 가리킵니다. tableView.indexPath(for:) 메서드를 사용하여 UITableViewCellindexPath를 가져올 수 있습니다. 이렇게 하면 indexPath.row를 얻을 수 있습니다.

 

prepare(for:sender:) 메서드는 다른 종류의 객체(: 버튼, 콜렉션 뷰 셀 등)sender로 받을 수도 있으므로, 적절한 다운캐스팅 및 객체의 종류에 따라 적절한 처리를 해주어야 합니다.

 

 

import WebKit

import UIKit

class DetailViewController: UIViewController {

@IBOutlet weak var nameLabel: UILabel!

@IBOutlet weak var webView: WKWebView!

var movieName =""

override func viewDidLoad() {

super.viewDidLoad()

//nameLabel.text = movieName

navigationItem.title = movieName

//let urlKorString = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query="+movieName

let urlKorString ="https://namu.wiki/w/"+movieName

// let urlKorString = "https://map.naver.com/v5/search/영화관"

let urlString = urlKorString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!

guard let url = URL(string: urlString) else { return }

let request = URLRequest(url: url)

webView.load(request)

 

}

 

import UIKit

struct MovieData: Codable {

let boxOfficeResult: BoxOfficeResult

}

// MARK: - BoxOfficeResult

struct BoxOfficeResult: Codable {

let dailyBoxOfficeList: [DailyBoxOfficeList]

}

// MARK: - DailyBoxOfficeList

struct DailyBoxOfficeList: Codable {

let movieNm : String

let audiAcc : String

let audiCnt : String

}

let movie = ["슈퍼 마리오 브라더스","드림", "존 윅 4","스즈메의 문단속", "옥수역귀신", "리바운드", "더 퍼스트 슬램덩크", "렌필드", "킬링 로멘스", "무명"]

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

var movieData : MovieData?

 

var movieURL ="https://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?key=9080505dec68de180c3367f5ff07061e&targetDt="

 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) ->Int {

return movie.count

}

 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! MyTableViewCell

cell.movieName.text = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].movieNm

cell.acc.text = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].audiAcc

cell.audi.text = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].audiCnt

if let aCnt = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].audiAcc {

let numF = NumberFormatter()

numF.numberStyle = .decimal

let aCount =Int(aCnt)!

let result = numF.string(for: aCount)!+""

cell.acc.text ="누적:\(result)"

//cell.audiCount.text = "어제:\(aCnt)"

}

if let aCnt = movieData?.boxOfficeResult.dailyBoxOfficeList[indexPath.row].audiCnt {

let numF = NumberFormatter()

numF.numberStyle = .decimal

let aCount =Int(aCnt)!

let result = numF.string(for: aCount)!+""

cell.audi.text ="어제:\(result)"

//cell.audiCount.text = "어제:\(aCnt)"

}

return cell

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

let dest = segue.destination as! DetailViewController

dest.movieName ="asd"

guard let myIndexPath = table.indexPathForSelectedRow else{

return

}

let row = myIndexPath.row

dest.movieName = (movieData?.boxOfficeResult.dailyBoxOfficeList[row].movieNm)!

}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) ->String? {

return "박스오피스(영화진흥위원회제공:"+makeYesterdayString()+")"

}

func numberOfSections(in tableView: UITableView) ->Int {

return 1

}

func makeYesterdayString() ->String {

let y = Calendar.current.date(byAdding: .day, value: -1, to: Date())!

let dateF = DateFormatter()

dateF.dateFormat ="yyyyMMdd"

let day = dateF.string(from: y)

return day

}

@IBOutlet weak var table: UITableView!

override func viewDidLoad() {

super.viewDidLoad()

table.delegate =self

table.dataSource =self

movieURL += makeYesterdayString()

getData()

}

func getData() {

guard let url = URL(string: movieURL) else {

print("Invalid URL")

return

}

 

let session = URLSession(configuration: .default)

let task = session.dataTask(with: url) { [weak self] (data, response, error) in

guard let self =self else {

return

}

 

if let error = error {

print(error)

return

}

 

guard let JSONdata = data else {

print("No data received")

return

}

 

let decoder = JSONDecoder()

 

do {

let decodedData =try decoder.decode(MovieData.self, from: JSONdata)

print(decodedData.boxOfficeResult.dailyBoxOfficeList[0].movieNm)

self.movieData = decodedData

DispatchQueue.main.async {

self.table.reloadData()

}

} catch {

print(error)

}

}

 

task.resume()

}

 

}

 

import UIKit

class MyTableViewCell: UITableViewCell {

@IBOutlet weak var audi: UILabel!

@IBOutlet weak var acc: UILabel!

@IBOutlet weak var movieName: UILabel!

override func awakeFromNib() {

super.awakeFromNib()

// Initialization code

}

override func setSelected(_ selected: Bool, animated: Bool) {

super.setSelected(selected, animated: animated)

// Configure the view for the selected state

}

}