如何在Swift中包含UIColor到Dictionary的值?

时间:2014-09-08 16:36:29

标签: dictionary swift

我想在Swift中启动一个字典数组,其中一个键的值是UIColor类型。所以我想创建以下数组:

var myArr:[[String: Any]] = [
    ["name": "mark", "age": "30", "color": UIColor.blackColor()]
]

但是,上面的代码会返回AssertString is not convertible to UIColor错误。但是Any应该在UIColor中使用,我不知道它为什么会返回这样的错误,也不知道它是什么意思。

那么如何解决问题并正确使用UIColor实例?

更新

很抱歉,但我发现实际的错误不在上面的代码段中 - 它位于以下部分,来自我自己的UIColor扩展名:

["name": "pete", "age" "25", "color": UIColor(R:245.0, G:168.0, B:13.0, A:1.0)]

我创建了一个名为UIColor+ColorWithInt.swift的单独文件(不确定正确的名称约定,但我只是将旧的Objective-C应用程序移植到Swift,这就是我使用{{1}的原因代表上面的数据。)

Dictionary

1 个答案:

答案 0 :(得分:3)

正如我的评论中所提到的,我建议在这种情况下使用结构或其他一些具体的数据结构。

import UIKit

struct Person {
    var name: String
    var age: Int
    var color: UIColor
}

var myArr:[Person] = [
    Person(name: "mark", age: 30, color: UIColor.blackColor())
]

或者作为一个班级......

class Person {
    var name: String
    var age: Int
    var color: UIColor

    init(name: String, age: Int, color: UIColor) {
        self.name = name
        self.age = age
        self.color = color
    }
}

var myArr:[Person] = [
    Person(name: "mark", age: 30, color: UIColor.blackColor())
]

RE:UPDATE

我想你想要这样的东西......

extension UIColor {
    convenience init(R: CGFloat, G: CGFloat, B: CGFloat, A:CGFloat) {
        self.init(red: (R/255.0), green: (G/255.0), blue: (B/255.0), alpha: A)
    }
}

var red = UIColor(R: 255, G: 0, B: 0, A: 1)