Swift - Switch statement not working

I want to store UIColor in NSUserDefaults. However, this leads to some problems, so I figured that I could save the UIColor as a String to convert back to UIColor.

I decided to do it with a switch statement:

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!")
    }

      

However, I am getting errors on each case line saying:

Type 'String' does not conform to protocol 'IntervalType'

      

I am sure this is not the most efficient method or the easiest way to do it, but it is the only way to know how to store UIColor in NSUserDefaults.

What is the problem?

EDIT: Preceding code showing how bc is defined:

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()

      

+3


source to share


1 answer


It is a duplicate, but the duplicate has no quick equivalent. Here's what, untested:

One way to do this is to archive it (using NSColor for example, although I haven't tested this):

let colorData = NSKeyedArchiver.archivedDataWithRootObject(color)
NSUserDefaults.standardUserDefaults.setObject(colorData forKey:"myColor")

      



And to return it:

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

      

+2


source







All Articles