如何将数据从可解码模型传递或实现到 ViewController?
Posted
技术标签:
【中文标题】如何将数据从可解码模型传递或实现到 ViewController?【英文标题】:How to pass or implement the data from decodable model to ViewController? 【发布时间】:2020-06-17 14:00:35 【问题描述】:我不知道如何将数据从可解码模型传递或实现到视图控制器。而且我在我的视图控制器中期待状态 200 或消息“成功”。所以我可以把它放在我的 UIButton 中,向用户显示服务器已连接。
我不久前尝试了 debugPrint(response),API 工作正常。
我的模特
struct ServerStatus: Decodable
let status: Int?
let service: String?
let function: String?
let msg: String?
enum CodingKeys: String, CodingKey
case status = "status"
case service = "service"
case function = "function"
case msg = "msg"
我使用 Alamofire 5.0 的 API 调用
class APIManager
static let sharedInstance = APIManager()
let headers: HTTPHeaders = [
.authorization(APIDefinitions.api_id)
]
func fetchServerStatus(parameters: Parameters, completion:@escaping (_ data: ServerStatus?, _ error: String?) -> Void)
AF.request(APIDefinitions.getServerStatus, method: .get, headers: headers).responseDecodable(of: ServerStatus.self) (response) in
print(response)
switch response.result
case .success(let serverStatus):
completion(serverStatus, nil)
break
case .failure( _):
completion(nil, "The Internet connection appears to be offline.")
break
【问题讨论】:
您的 ViewCotroller 代码在哪里? 只有 touchUpInside IBAction func onlineModePressed(_ sender: Any) 和 IBOutlet weak var connect: UIButton! 【参考方案1】:您已经处理过网络部分的 APIManager。现在你只需要在 ViewController 的viewDidLoad
中调用这个函数,像这样:
class ViewController: UIViewController
let button = UIButton()
override func viewDidLoad()
super.viewDidLoad()
APIManager.sharedInstance.fetchServerStatus(parameters: nil) (response, error) in
if let error = error
button.setTitle("Connection Failed", for: .normal)
else if let status = status
if response.status == 200 || response.msg == "success"
button.setTitle("Connected", for: .normal)
else
button.setTitle("Connection Failed", for: .normal)
【讨论】:
我应该在完成参数中添加什么我的好先生? 哪个完成参数? 谢谢,它现在可以在您的解决方案中使用,只是根据我的喜好做了一些小改动。 @Chi 如果答案有效,则将其标记为正确并在可能的情况下投票。以上是关于如何将数据从可解码模型传递或实现到 ViewController?的主要内容,如果未能解决你的问题,请参考以下文章
如何将变量从 jQuery draggable 传递到 droppable