Swift - Switch语句不起作用

时间:2014-08-15 13:53:43

标签: ios xcode swift switch-statement nsuserdefaults

我想在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()

1 个答案:

答案 0 :(得分:2)

这是重复的,但副本没有快速等价物。就是这样,未经测试:

这样做的一种方法可能是归档它(就像使用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
}