Swift:从另一个函数获取函数中的变量

Posted

技术标签:

【中文标题】Swift:从另一个函数获取函数中的变量【英文标题】:Swift: Get variable in function from another function 【发布时间】:2018-07-16 16:04:30 【问题描述】:

我的项目中有这段代码(Xcode 9.4.1 (9F2000)Swift 3):

func application(_ application: UIApplication,
                didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 
    let tokenParts = deviceToken.map  data -> String in
        return String(format: "%02.2hhx", data)
    
    let token = tokenParts.joined()
    print("Device Token: \(token)\n")

func httpRequest() 
    let postString = "token=\(token)"

这将打印推送通知的设备令牌。

但是对于let postString = "token=\(token)",我得到了这个:

使用未解析的标识符“令牌”

我想我无法从另一个函数访问变量。

如何从另一个函数访问我的函数httpRequest() 中的该变量?

【问题讨论】:

没有名为token 的“一个变量”。每次调用application(_:didRegisterForRemoteNotificationsWithDeviceToken:) 都会有一个token。多个线程可以一次调用该函数,并且每次调用都有自己的一组局部变量。因此,您不能访问另一个函数中的变量。您需要使用参数和返回值来传递数据。 另外,您不应该手动创建查询字符串。相反,请使用 NSURLQueryItems grokswift.com/building-urls 【参考方案1】:

您需要为此创建一个 var

var myToken:String?

//

  func application(_ application: UIApplication,
                didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 
    let tokenParts = deviceToken.map  data -> String in
        return String(format: "%02.2hhx", data)
    
    let token = tokenParts.joined()
    self.myToken = token
    print("Device Token: \(token)\n")

func httpRequest() 
    if let postString = myToken 
    

注意:在收到令牌之前不要发起任何请求,因此要么在didRegisterForRemoteNotificationsWithDeviceToken 内向应用程序的其他部分触发通知,要么在获得令牌后在函数结束时运行它token ,最好存储 token 或与单例共享,以便在任何地方轻松访问

【讨论】:

@Sh_Khan你能帮我解决这个问题吗:***.com/questions/51359471/…

以上是关于Swift:从另一个函数获取函数中的变量的主要内容,如果未能解决你的问题,请参考以下文章

Python 3从另一个函数更改函数中的变量

访问从另一个类调用的函数中的变量

jquery从另一个函数获取变量

从另一个 findOne 函数中的 findOne mongoose 获取数据

如何从另一个函数中获取变量

在 Swift 中从另一个 ViewController 访问变量