Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-Switch语句不工作_Ios_Xcode_Swift_Switch Statement_Nsuserdefaults - Fatal编程技术网

Ios Swift-Switch语句不工作

Ios Swift-Switch语句不工作,ios,xcode,swift,switch-statement,nsuserdefaults,Ios,Xcode,Swift,Switch Statement,Nsuserdefaults,我想在NSUserDefaults中存储UIColor。但是,这会导致一些问题,所以我想我可以将UIColor保存为字符串,以便转换回UIColor 我决定用switch语句来实现这一点: switch bc { case "UIColor.redColor()": blockColour = UIColor.redColor() case "UIColor.orangeColor()": blockColour = UIColor.orangeC

我想在NSUserDefaults中存储UIColor。但是,这会导致一些问题,所以我想我可以将UIColor保存为字符串,以便转换回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()

这是一个副本,但副本没有swift等价物。以下是未经测试的:

一种方法可能是将其归档(就像使用NSColor一样,尽管我还没有对此进行测试):

为了找回它:

var color : UIColor?
if let colorData = NSUserDefaults.standardUserDefaults.objectForKey("myColor") as? NSData {
    color = NSKeyedUnarchiver.unarchiveObjectWithData(colorData) as UIColor
}

您如何定义bc?为什么不存储UIColor?Franklin,请参阅我的编辑。Timur,尝试为key BlockColor插入非属性列表对象时出错?这不是重复的。问:我的车没开;我想它需要加油。A:坐公共汽车。是的,他应该为userDefaults()正确编码;加上这个作为答案;让海报决定他是否希望避免
切换/case
@GoZoner这是meta上没完没了讨论的A/B问题。问题是如何在用户默认值中存储颜色。答案是将它们存储为数据,而不是使用一些荒谬的技术将它们编码为字符串,提出一个关于switch语句不起作用的模糊问题,并帮助提问者继续不断地出错。提问者甚至说,我确信这不是最有效的方法,也不是最简单的方法,但这是我唯一能找出如何在NSUserDefaults中保存UIColor的方法。这就是这里要问的问题。
var color : UIColor?
if let colorData = NSUserDefaults.standardUserDefaults.objectForKey("myColor") as? NSData {
    color = NSKeyedUnarchiver.unarchiveObjectWithData(colorData) as UIColor
}