我想在这里做两件不同的事情并且两者都有错误。我试图将struct添加到字典中,然后我编写了一个函数来随机抽取一个字典条目。
这是结构:
struct Customer
{
var name: String
var email: String
}
字典:
var customerDatabase: [String: String] = [Customer(name: "Lionel Messi", email:
"lmessi@fifa.com"), Customer(name: "Cristiano Ronaldo", email: "cronaldo@fifa.com"),
Customer(name: "Wayne Rooney", email: "wrooney@fifa.com")]
这是我收到的字典错误信息:
游乐场执行失败:: 45:42:错误:输入' [String:String]'不符合协议' ArrayLiteralConvertible' var customerDatabase:[String:String] = [客户(姓名:" Lionel Messi",电子邮件:" lmessi@fifa.com"),客户(姓名:" Cristiano Ronaldo& #34;,电子邮件:" cronaldo@fifa.com"),客户(姓名:" Wayne Rooney",电子邮件:" wrooney@fifa.com")]
最后,我的函数将从我的字典中随机抽取Customer结构。
func randomCustomer() -> ()
{
var customer = arc4random_uniform(customerDatabase)
return customer
}
我的功能的错误消息。
<EXPR>:48:39: error: '[String : String]' is not convertible to 'UInt32'
var customer = arc4random_uniform(customerDatabase)
^
Darwin._:1:5: note: in initialization of parameter '_'
let _: UInt32
我觉得这样一个菜鸟问这么简单的问题。非常感谢您的帮助!
答案 0 :(得分:2)
以下是更正后的代码:
var customerDatabase:[Customer] = [Customer(name: "Lionel Messi", email:
"lmessi@fifa.com"), Customer(name: "Cristiano Ronaldo", email: "cronaldo@fifa.com"),
Customer(name: "Wayne Rooney", email: "wrooney@fifa.com")]
func randomCustomer() -> Customer
{
let customer = Int(arc4random_uniform(UInt32(customerDatabase.count)))
return customerDatabase[customer]
}
for _ in 1...10 {
println(randomCustomer().name)
}
1)你真的需要一个数组而不是字典。在这种情况下,您需要一组Customer
个对象或[Customer]
。
2)randomCustomer
函数需要返回Customer
。首先,调用arc4random_uniform()
,其生成的数字介于0
和1之间,而不是您传递的数字。在这个例子中,我们传递数组中Customer
个对象的数量为3的计数,但首先我们必须将它变成UInt32
,因为这是arc4random想要的。它生成一个随机的0,1或2,并将其作为UInt32
返回,我们将其转回Int
并分配给变量customer
。然后将此customer
值用作Customer
数组的索引,以选择函数返回的值。
3)最后,我添加了一个循环来调用randomCustomer()
10次并打印出他们的名字。请注意,我使用_
的循环索引而不是i
或index
等变量名称,因为我们不使用变量,所以我们不给它一个名。
这是一个字典版本:
var customerDatabase: [String:String] = ["Lionel Messi":
"lmessi@fifa.com", "Cristiano Ronaldo": "cronaldo@fifa.com",
"Wayne Rooney": "wrooney@fifa.com"]
func randomCustomer() -> Customer
{
let keys = customerDatabase.keys.array
let customer = Int(arc4random_uniform(UInt32(keys.count)))
let name = keys[customer]
let email = customerDatabase[name]!
return Customer(name: name, email: email)
}
1)字典只使用用户名作为键,电子邮件作为值。
2)这次,随机函数首先创建字典中所有键的数组。然后它选择一个随机密钥,并使用该密钥获取电子邮件值。字典查找始终返回可选值。在这里,我们用!
打开。最后,它从密钥(名称)和值(电子邮件)创建一个Customer
对象并返回该对象。