Swift 函数 - 传递可选对象
Swift function - pass optional object
所以我试图在 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
您的问题不在于 UIButton?
,而是在于 _params:[String: String!]
,如果您在 submitBoilerPlate 函数下面的某处使用它的话。尝试将其替换为 _params:[String: String]
将您的代码粘贴到 playground 是帮助您进行调试的一个很好的方法。我把你的代码带到我自己的操场上,发现以下代码有效:
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
的明确类型以及 submitBoilerPlate
调用中 _params
和 _button
错误的删除。
在没有显式类型的情况下指定 params
会导致编译器无法根据所需的 [String: String!]
参数类型正确对齐您的位。
将 _params
和 _button
作为函数调用的一部分实际上是一个错误。当没有 space 时,参数没有名称。备选方案的一个例子是:
func submitBoilerPlate(_url:String, someParams _params:[String: String!], andButton _button:UIButton?) {
// .. same func body
}
submitBoilerPlate(url, someParams:params, andButton:nil)
所以我试图在 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
您的问题不在于 UIButton?
,而是在于 _params:[String: String!]
,如果您在 submitBoilerPlate 函数下面的某处使用它的话。尝试将其替换为 _params:[String: String]
将您的代码粘贴到 playground 是帮助您进行调试的一个很好的方法。我把你的代码带到我自己的操场上,发现以下代码有效:
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
的明确类型以及 submitBoilerPlate
调用中 _params
和 _button
错误的删除。
在没有显式类型的情况下指定 params
会导致编译器无法根据所需的 [String: String!]
参数类型正确对齐您的位。
将 _params
和 _button
作为函数调用的一部分实际上是一个错误。当没有 space 时,参数没有名称。备选方案的一个例子是:
func submitBoilerPlate(_url:String, someParams _params:[String: String!], andButton _button:UIButton?) {
// .. same func body
}
submitBoilerPlate(url, someParams:params, andButton:nil)