使用 Alamofire + SwiftyJSON 定义全局变量

Posted

技术标签:

【中文标题】使用 Alamofire + SwiftyJSON 定义全局变量【英文标题】:Define global variable with Alamofire + SwiftyJSON 【发布时间】:2016-12-27 18:37:12 【问题描述】:

我使用 Alamofire 进行请求,我使用 swiftyjson 进行 json 解析。

我需要为其他视图控制器定义全局变量。

我有这个代码:

import UIKit
import Alamofire
import SwiftyJSON

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate 

    var window: UIWindow?

    struct Settings 
        static var registration_url = String();
        static var login_url = String();
    

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

        Alamofire.request("http://localhost/settings.php").responseJSON  response in

            if response.result.isSuccess 

                let json = JSON(data: response.data!);

                Settings.registration_url = json["registration_url"].stringValue;
                Settings.login_url = json["login_url"].stringValue;

             else 

                Settings.registration_url = "http://localhost/register.php";
                Settings.login_url = "http://localhost/login.php";

            

        

        print(Settings.registration_url);
        print(Settings.login_url)

        return true
    


我正在检查调试窗口,print(Settings.registration_url); 看起来是空白的

为什么?

谢谢。对不起我的英语不好。

【问题讨论】:

【参考方案1】:

您的Settings 结构不是全局的。您需要在类之外定义它以使其具有全局性:

struct Settings 
    static var registration_url = String();
    static var login_url = String();


@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate 

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

        Alamofire.request("http://localhost/settings.php").responseJSON  response in

            if response.result.isSuccess 

                let json = JSON(data: response.data!);

                Settings.registration_url = json["registration_url"].stringValue;
                Settings.login_url = json["login_url"].stringValue;

             else 

                Settings.registration_url = "http://localhost/register.php";
                Settings.login_url = "http://localhost/login.php";

            

        

        print(Settings.registration_url);
        print(Settings.login_url)

        return true
    


【讨论】:

以上是关于使用 Alamofire + SwiftyJSON 定义全局变量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire 发布 SwiftyJSON?

在 Swift 中将 Alamofire 结果解析为对象(使用:Alamofire、SwiftyJSON 和 ObjectMapper)

swift、Alamofire、SwiftyJSON:如何解析 arrayObject

数据未使用 Alamofire + SwiftyJSON 加载到 UITableView

SwiftyJson 和 Alamofire 使用的解码结构

使用 Alamofire + SwiftyJSON 获取 JSON 数组