swift - 二元运算符 '+' 不能应用于类型 'String' 和 '() -> String' 的操作数

标签 swift

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/

相关文章:

ios - BLE 设备应该在不扫描的情况下连接

ios - 用 println() 打印 `po` 对象描述?

swift - 嵌套合并运算符的混淆

swift - 设置集合类型 swift

ios - Swift:找不到接受提供的参数的 '|' 的重载

swift - Xcode:抑制所有外部库的所有警告

swift - 奇怪的可选元组数组行为

swift - 在 AVPlayer.play() 之前使用 AVPlayer.seek() 时更新 AVPlayer 的显示帧

Swift WatchOS 错误 : Unknown property in Interface description ('image' ) for controller

swift - 为什么我一添加命中框这个功能就停止工作了?