Swift 데이터 넘겨주는방법
- property를 넘겨주는방법
let detailVC = IntanceDetailViewController(
nibName: "IntanceDetailViewController", bundle: nil)
//xib를 쓰는 컨트롤러를 가져올 때 사용
self.present(detailVC, animated: false, completion: nil) //메모리에 올리기
detailVC.someLabel.text = "vv"//근데 이것보다는 DetailViewController에 변수를 하나 만들어서 거기에 할당하는게 나음
- xib없이 세그웨이로만 연결될때 데이너 텀겨주는방법
if segue.identifier == "segueDetail" { //세그웨이:(스토리보드간 컨트롤러 연결줄)
if let detailVC = segue.destination as? SegueDetailViewController {
//segue.destination 이 SegueDetailViewController로 타입캐스팅이 되느냐
// detailVC.dataLabel.text = "abcd"////화면 나올준비가 되지않은상태에서 보냈기때문에 오류가난다
detailVC.dataString = "abcd"//그래서
}
}
- viewcontroller 전체를 넘겨주는방법
let detailVC = IntanceDetailViewController(nibName: "IntanceDetailViewController", bundle: nil)//xib를 쓰는 컨트롤러를 가져올 때 사용
//detailVC.mainVC 타입 = ViewController
detailVC.mainVC = self //나자신(ViewController)을 넘겨주는것 so 나자신에 대한것 모두 접근 가능, 사용가능
self.present(detailVC , animated: true, completion: nil)//화면이동
- delegate 로 넘기는방법(프로토콜을 사용해서 DelegateDetailViewController에서 프로토콜로 정의된 기능만 접근가능하게하기)
let detailVC = DelegateDetailViewController(nibName: "DelegateDetailViewController", bundle: nil)
//ViewController가 DelegateDetailViewControllerDelegate를 준수 하기 때문에 오류가 없어짐
//DelegateDetailViewControllerDelegate 프로토콜에 있는 passString만 접근 가능
detailVC.delegate = self
self.present(detailVC, animated: true, completion: nil)
#####################################################
//DelegateDetailViewController
protocol DelegateDetailViewControllerDelegate:AnyObject {
func passString(string: String)
}
class DelegateDetailViewController: UIViewController {
//viewcontroller에서 DelegateDetailViewControllerDelegate 프로토콜에 정의된것만 self 로 보낸다
weak var delegate: DelegateDetailViewControllerDelegate?
@IBAction func passDataToMainVC(_ sender: Any) {
//delegate가 없는동안에는 nil이기 때문에 실행이 안댐
delegate?.passString(string: "delegate pass Data")
}
}
- 클로저를 이용해서 넘기는 방법
let detailVC = closureDetailViewController(nibName: "closureDetailViewController", bundle: nil)
//detailVC 안에있는 closurePassData 클릭하면
//구현부
//moveToClosure버튼을 처음 누르면 myClosure가 nil이기 때문에 실행 x
detailVC.myClosure = { str in
self.dataLabel.text = str
print("ac")
print(str + "a")
}
self.present(detailVC, animated: true, completion: nil)
}
@IBAction func movetoNoti(_ sender: Any) {
let detailVC = NotiDetailViewController(nibName: "NotiDetailViewController", bundle: nil)
self.present(detailVC, animated: true, completion: nil)
}
###########################################
//closureDetailViewController
var myClosure: ((String) -> Void)?
@IBAction func closurePassData(_ sender: Any) {
myClosure?("closure String")
self.dismiss(animated: true, completion: nil)
}
- notification을 이용해서 넘기는 방법
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let notificationName = Notification.Name("sendSomeString")
//notificationName이 호출이 되면 showSomeString이 실행되도록 구조가 잡힘
NotificationCenter.default.addObserver(self, selector: #selector(showSomeString), name: notificationName, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil)
/키보드나 나타날때 notificationcenter이 알려준다
NotificationCenter.default.addObserver(self, selector: #selector(keyboardDidShow), name: UIResponder.keyboardDidShowNotification, object: nil)
NotificationCenter.default.removeObserver(self, name: notificationName, object: nil)
}
@objc func showSomeString(notification: Notification){
if let str = notification.userInfo?["str"] as? String {
self.dataLabel.text = str
}
}
@objc func keyboardWillShow(){
print("will show")
}
@objc func keyboardDidShow(){
print("Did show")
}
###################################
//NotiDetailViewController
let notificationName = Notification.Name("sendSomeString")
//post: 호출
NotificationCenter.default.post(name: notificationName, object: nil, userInfo:["str":"noti String"])
- 틀린게 있을 수 있어요
Author And Source
이 문제에 관하여(Swift 데이터 넘겨주는방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kimjk3381/Swift-컨트롤러-세그웨이-xib자체-가져오는법저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)