Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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
Dictionary 如何在Swift中将UIColor包含到字典的值中?_Dictionary_Swift - Fatal编程技术网

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

Dictionary 如何在Swift中将UIColor包含到字典的值中?,dictionary,swift,Dictionary,Swift,我想在Swift中启动一个Dictionary数组,其中一个键的值的类型为UIColor。因此,我想创建以下数组: var myArr:[[String: Any]] = [ ["name": "mark", "age": "30", "color": UIColor.blackColor()] ] 但是,上面的代码返回一个AssertString不能转换为UIColor错误。但是Any应该在UIColor中使用,我不知道它为什么会返回这样的错误,也不知道它是什么意思 那么如何解决这个

我想在Swift中启动一个Dictionary数组,其中一个键的值的类型为
UIColor
。因此,我想创建以下数组:

var myArr:[[String: Any]] = [
    ["name": "mark", "age": "30", "color": UIColor.blackColor()]
]
但是,上面的代码返回一个
AssertString不能转换为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,这就是我使用
字典
来表示上述数据的原因)


正如我在评论中提到的,我建议在这个场景中使用struct或其他一些具体的数据结构

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)

AnyObject
代替
Any
怎么样?在任何情况下,对于
struct
而不是使用
Dictionary
来说,这看起来是一个很好的用例,它返回一个错误:
类型“AnyObject”不符合协议“StringLiteralConvertible”
。奇怪,您使用的是什么beta版?Beta 7游乐场适用于
Any
AnyObject
,适用于meI使用Beta 7。但我不使用游乐场,它可能是你定义的范围。您是想在全局范围内还是在类内定义它?出于好奇,为什么要在类上定义一个结构?但我同意,字典不是一个好的选择。我仍在努力找出最佳实践。我想从最小的分母开始,当你需要其他类型提供的东西时向上移动。通常情况下,我会选择一个类,但在上周的一些阅读之后,我会从一个struct开始,看看是否需要类的功能。再一次,我仍然(和我们所有人一样,我确信)试图找出Swift的最佳实践。以下是我读到的文章@Zaph,你怎么看?我同意,但我会将类置于结构之上,至少现在是这样,因为结构不是对象,并且会与任何对象产生问题。另一个原因是在结构上复制,而不是在类上引用。struct在某些线程情况下具有优势。我也读过那个博客,注意Chris甚至不讨论类,所以没有关于类的结构的争论。
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)