swift - (Swift) - 如何获取函数内部变量的值

标签 swift

我必须在我的项目中创建文件,1 - view.swift 和 2 - login.swift。 我的 login.swift 中有一个函数,它将从我提供的网站获取 token 。然后我需要我的函数从网站获取的 token ,并且我想在我的 view.swift 中使用它,但无论我做什么,我都无法在该函数之外获取它。

代码是这样的:

 struct universal{
 static var token = String()
 static var passkey = String()
 }
 class LoginManager {

 let loginURL = "http://somesite.com"

 func login() {
    let parameters: Parameters = [
        "username": "username",
        "password": "password",
        "device": "gtv",
        "redir": "0"
    ]

    Alamofire.request(loginURL, method: .get, parameters: parameters).responseJSON { (response) in

        let jsonRes = JSON(data: response.data!)
        var token = jsonRes["token"].stringValue
        // the value of universal.token is not print outside of this func nither the token. But both of them can get the value here and when printing them it shows the value
        universal.token = jsonRes["token"].stringValue
   }



   }

我是新手,所以不要刻薄。我只是尝试学习。

问题是我怎样才能只获得值而不仅仅是闭包,或者如果可能的话在其他类中使用整个函数

最佳答案

我认为您想要访问 Alamofire block 之外的值,并且您无法在“Alamofire” block 之外打印该值。

解决方案: 下面我编辑了你的代码,尝试实现它。在这里,我将向您展示如何在 Alamofire block 之外访问您的代币值,您还可以根据您的要求实现它。

     struct universal
     {
         static var token = String()
         static var passkey = String() 
     }

     class LoginManager 
    {

     let loginURL = "http://somesite.com"

     func login()
     {
        let parameters: Parameters = [
            "username": "username",
            "password": "password",
            "device": "gtv",
            "redir": "0"
        ]

        Alamofire.request(loginURL, method: .get, parameters: parameters).responseJSON { (response) in

            let jsonRes = JSON(data: response.data!)
            var token = jsonRes["token"].stringValue

            self.myFunction(str: token)

            universal.token = jsonRes["token"].stringValue

       }
   }
   func myFunction(str: String)
    {
         print("str value ====%@",str)
         //Here it will print value of your token.
     }
}

解决方案 2:

这里我会使用NSUserDefault,想了解更多可以搜索一下,google上有很多例子。

现在,我们将使用 NSUserDefault。

//Use below code in alamofire block to save token value.

    let defaults = UserDefaults.standard
    defaults.set(token, forKey: "tokenValue")

//Use below code to print anywhere.

    let defaults = UserDefaults.standard
    if let myToken = defaults.value(forKey: "tokenValue") as? String {
        print("defaults savedToken: \(myToken)")
    }

希望对您有帮助。

关于swift - (Swift) - 如何获取函数内部变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41898580/

相关文章:

ios - Facebook 登录 - 停留在白色网页 SWIFT

swift - 如何在 Swift 中无缝过渡到 Interstitial iAd?

ios - 如果从 Siri 快捷方式执行操作,我应该捐赠交互吗?

swift - 在 Vapor 中使用原始 sql 返回条目总数

swift - 找不到“双转换/双转换.h”文件

swift - 如何在Xcode环境中为Swift添加身份验证

ios - NSUserDefaultsDidChangeNotification 不是从扩展触发的

ios - 类是否可以显式调用协议(protocol)扩展的方法?

swift - 使用数组存储的颜色(字符串)来设置标签元素的 UIColor

xcode - 通过 Swift 访问 MacOS 中的键盘设置