所以我试图在Swift中调用函数“submitBoilerPlate”:
var url:String = "https://eamorr.com/ajax/getLatestContent.php"
var params = [
"hello":"world"
]
submitBoilerPlate(url, _params:params, _button:nil)
这是相应的功能:
func submitBoilerPlate(_url:String, _params:[String: String!], _button:UIButton?){
var oldTitle = _button?.titleLabel?.text
_button?.setTitle("Please wait...", forState: UIControlState.Normal)
_button?.enabled = false
//etc.
...
}
当我发送一个在我的xib上声明的真实UIButton时,一切都按预期工作。
但是,我希望能够发送一个“nil”按钮(这个特殊的xib没有按钮)。
这可能吗?或者我必须创建一个新功能?我正在努力将代码重复保持在最低限度......
当代码到达submitBoilerPlate(...)时,我收到以下运行时错误:
fatal error: can't unsafeBitCast between types of different sizes
答案 0 :(得分:1)
如果你在submitBoilerPlate函数中的某个地方使用它,那么问题不在于UIButton?
,而在于_params:[String: String!]
。尝试将其替换为_params:[String: String]
答案 1 :(得分:1)
将代码粘贴到游乐场是帮助自己调试的好方法。我把你的代码带到我自己的游乐场,发现以下工作:
import UIKit
func submitBoilerPlate(_url:String, _params:[String: String!], _button:UIButton?){
var oldTitle = _button?.titleLabel?.text
_button?.setTitle("Please wait...", forState: UIControlState.Normal)
_button?.enabled = false
}
var url:String = "https://eamorr.com/ajax/getLatestContent.php"
var params:[String: String!] = [
"hello":"world"
]
submitBoilerPlate(url, params, nil)
请注意明确的params
类型以及_params
来电中_button
和submitBoilerPlate
错误的删除。
在没有显式类型的情况下指定params
会导致编译器根据所需的[String: String!]
参数类型无法正确对齐您的位。
将_params
和_button
作为函数调用的一部分实际上是一个错误。当没有空间时,参数没有名称。另一个例子是:
func submitBoilerPlate(_url:String, someParams _params:[String: String!], andButton _button:UIButton?) {
// .. same func body
}
submitBoilerPlate(url, someParams:params, andButton:nil)