【发布时间】:2014-08-15 13:53:43
【问题描述】:
我想在 NSUserDefaults 中存储一个 UIColor。但是,这会导致一些问题,所以我想我可以将 UIColor 保存为 String 以转换回 UIColor。
我决定用 switch 语句来做到这一点:
switch bc {
case "UIColor.redColor()":
blockColour = UIColor.redColor()
case "UIColor.orangeColor()":
blockColour = UIColor.orangeColor()
case "UIColor.blueColor()":
blockColour = UIColor.blueColor()
case "UIColor.greenColor()":
blockColour = UIColor.greenColor()
case "UIColor.blackColor()":
blockColour = UIColor.blackColor()
case "UIColor.grayColor()":
blockColour = UIColor.grayColor()
case "UIColor.purpleColor()":
blockColour = UIColor.purpleColor()
default:
println("ERROR!")
}
但是,我在每个案例行都收到错误,说:
Type 'String' does not conform to protocol 'IntervalType'
我确信这不是最有效的方法或最简单的方法,但这是我能弄清楚如何在 NSUserDefaults 中保存 UIColor 的唯一方法。
有什么问题?
编辑:前面的代码显示如何定义 bc:
var bc : String!
var blockColour : UIColor!
var userDefaults = NSUserDefaults.standardUserDefaults()
if var blockColourString : AnyObject = userDefaults.valueForKey("blockColour") {
blockColourString = userDefaults.valueForKey("blockColour")
bc = blockColourString as String
}
else {
var blockColourString : AnyObject = "UIColor.orangeColor()"
userDefaults.setValue(blockColourString, forKey: "blockColour")
bc = blockColourString as String
}
userDefaults.synchronize()
【问题讨论】:
-
你是如何定义 bc 的?
-
为什么不想存储 UIColor 呢?
-
富兰克林,看我的编辑。 Timur,它给出了一个关于尝试为键 blockColour 插入非属性列表对象的错误?
-
这不是重复的。问:我的车不跑了;我认为它需要天然气。答:坐公交车。是的,他应该为 userDefaults() 正确编码;将其添加为答案;让发帖人决定是否要避开
switch/case。 -
@GoZoner 这是 meta 上无休止讨论的 A/B 问题。问题是如何在用户默认值中存储颜色。答案是将它们存储为数据,而不是使用一些荒谬的技术将它们编码为字符串,询问有关 switch 语句不起作用的模糊问题,并帮助提问者继续让事情变得越来越错误。提问者甚至说我确信这不是最有效的方法或最简单的方法,但这是我能弄清楚如何在 NSUserDefaults 中保存 UIColor 的唯一方法。 这就是这里要问的问题。
标签: ios xcode swift switch-statement nsuserdefaults