1
비슷한 질문은 이미 요청했지만 도움을받지 못했습니다. 내가보기 프로토콜에서 Singleton
클래스에서 선언 된 프로토콜 메서드를 호출하려고하지만 호출 된 메서드는 호출하지 않습니다. 대리인 메서드가 싱글 톤을 사용하여 호출되지 않았습니다
내 프로토콜과 클래스
은 다음과 같습니다 프로토콜을 구현import Foundation
protocol ServiceDelegate {
func serviceData(data: [String: Any])
}
class Service {
private static let sharedInstance = Service() // singleton object
var delegate: ServiceDelegate?
class func shared() -> Service {
return sharedInstance
}
func login(postData:String) {
let url = URL(string: "MY_URL")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
let dataBody = postData.data(using:String.Encoding.ascii, allowLossyConversion: false)
request.httpBody = dataBody
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard let data = data, error == nil else {
print(error?.localizedDescription ?? "No data")
return
}
let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
if let dataArray = responseJSON as? [String: Any] {
self.delegate?.serviceData(data: dataArray) // This is getting called
}
}
task.resume()
}
}
내보기 컨트롤러 클래스는 다음과 같습니다
import UIKit
class LoginVC: UIViewController, ServiceDelegate {
var serviceInstance: Service = Service()
override func viewDidLoad() {
super.viewDidLoad()
serviceInstance.delegate = self
}
@IBAction func loginBtn(_ sender: Any) {
let info = "userName=\(String(describing: usernameText.text!))&password=\(String(describing: passwordText.text!))"
Service.shared().login(postData: info)
}
// This is not getting called:
func serviceData(data: [String : Any]) {
print(data)
}
위의 구현이 맞습니까? 개인 싱글 톤 객체를 사용하여 프로토콜 메소드를 성공적으로 구현할 수 있습니까?
delegate = self.delegate { // 여기에서 작업 하시겠습니까? } els e { print ("The delegate is nil") }하지만 그게 아무것도 없음 –
https://medium.com/ios-os-x-development/ios-three-ways-to-pass-data-from- 모델 - 투 - 컨트롤러 - b47cc72a4336 –