【问题标题】:Swift - Switch statement not working [duplicate]Swift - Switch 语句不起作用[重复]
【发布时间】: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


【解决方案1】:

这是一个副本,但该副本没有 swift 等效项。这是未经测试的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多