class ViewController: UIViewController{
var token: String?
func settoken(newtoken: String){
token = newtoken
}
func gettoken() -> String{
return token!
}
func gotoverifyphone(){
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let verifyphone = storyboard.instantiateViewController(withIdentifier: "verifyphone")
OperationQueue.main.addOperation{
self.present(verifyphone, animated: true, completion: nil)
}
}
@IBAction func btnPressed(_ sender: Any){
...some code
let newtoken = json["message"] as? String
self.settoken(newtoken: newtoken!)
self.gotoverifyphone()
}
}
ViewController.swift
class VC_VerifyPhone: UIViewController {
@IBAction func btnVerifyPressed(_ sender: Any){
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let token = "Bearer " + ViewController.gettoken(ViewController)
// the line above shows Binary operator '+' cannot be applied to operands of type 'String' and '() -> String'
request.addValue("authorization", forHTTPHeaderField: token)
}
}
VC_VerifyPhone.swift
在第二类的倒数第二行,显示错误:
二元运算符 '+' 不能应用于 'String' 和 '() -> String' 类型的操作数
我做错了什么,我该如何解决?
编辑:
现在我收到这个错误:
实例成员“gettoken”不能用于类型“ViewController”;您是想改用这种类型的值吗?
最佳答案
您已经被 Swift 的一些乐趣/怪异/等等所困扰。取决于你的观点!
gettoken()
是 ViewController
类的一个实例 方法,应该在实例上调用。例如:
var myViewController : ViewController = ...
...
let token = myViewController.gettoken()
您没有这样做,而是在类 本身上调用了它,这根本不是一回事。您需要 ViewController 类的实例,以在其上调用 get token()
。
为什么会出现令人困惑的错误?
出于我不会尝试解释 Swift 4 的原因(至少,Swift 是一个移动的目标)允许你写:
myViewController.gettoken()
作为
ViewController.gettoken(myViewController)()
这部分是你写的,错误消息指的是这个表格。 (出于好奇,想一想实例方法具有 class -> arguments -> result 形式的类型并且是类的成员。)
关于swift - 二元运算符 '+' 不能应用于类型 'String' 和 '() -> String' 的操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51228249/