我想将UIColor存储在NSUserDefaults中。但是,这导致了一些问题,因此我想可以将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()
这是重复项,但是重复项没有快速等效项。这是未经测试的:
一种实现方法是将其存档(就像使用NSColor一样,尽管我还没有测试过):
let colorData = NSKeyedArchiver.archivedDataWithRootObject(color)
NSUserDefaults.standardUserDefaults.setObject(colorData forKey:"myColor")
并找回它:
var color : UIColor?
if let colorData = NSUserDefaults.standardUserDefaults.objectForKey("myColor") as? NSData {
color = NSKeyedUnarchiver.unarchiveObjectWithData(colorData) as UIColor
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句