【发布时间】:2015-04-30 09:23:13
【问题描述】:
我正在尝试编写一个函数,该函数采用变量指针和描述符/键并为变量设置新值。理想情况下,指针应该是对象或原语,但我也可以使用单独的函数(或附加参数)。 在我的代码中,我也使用键从数据库中检索新值,但在以下示例中,我使用虚拟值对其进行了简化,以便可以在游乐场中轻松使用:
import UIKit
func setValue(inout object: AnyObject, key: String) {
switch key {
case "String":
object = "A String"
case "UIColor":
object = UIColor.whiteColor()
case "Bool":
object = true
default:
println("Unhandled key: \(key)")
}
}
var string: String = "Default String"
var color: UIColor = UIColor.blackColor()
var bool: Bool = false
setValue(&string, "String")
setValue(&color, "UIColor")
setValue(&bool, "Bool")
我收到以下错误:
"不能使用类型为 '(inout) 的参数列表调用 'setValue' 字符串,键 String)'"
我知道我在这里混合了对象和基元。我也尝试将其分解并将它们分成两个函数,但即使这样也失败了:
func setValue(inout object: AnyObject, key: String) {
switch key {
case "UIColor":
object = UIColor.whiteColor()
default:
println("Unhandled key: \(key)")
}
}
var color: UIColor = UIColor.blackColor()
setValue(&color, "UIColor")
这也给出了同样的错误:
"不能使用类型为 '(inout) 的参数列表调用 'setValue' UIColor, key String)'"
如果我将“AnyObject”更改为“UIColor”,它可以工作,但函数的重点是,它需要任何变量类型或至少任何对象类型(我会使用“Any”为基元编写第二个函数然后或添加另一个参数)
在 Objective-C 中我使用指针,将方法转移到 Swift 也不起作用,结果相同:
func setValue(object: UnsafeMutablePointer<AnyObject>, key: String) {
switch key {
case "String":
object.memory = "A String"
case "UIColor":
object.memory = UIColor.whiteColor()
case "Bool":
object.memory = true
default:
println("Unhandled key: \(key)")
}
}
有人知道我在这里缺少什么吗?非常感谢任何帮助!
谢谢!
【问题讨论】:
标签: ios swift pointers object parameters