HI与之前的一个问题相关,我把这个问题弄得一团糟。如果将某种类型的博客文章传递给我的函数
,我需要做的是返回nil这是我传递的类实例
class BlogPost {
var type = Int(arc4random_uniform(UInt32(types.count)))
var views : Int?
var author : String
var email : String
var order : Int = 0
init(author : String, email : String, order : Int) {
self.author = author
self.email = email
self.order = order
}
func teaser() -> (authorName : String, numberOfViews : Int) {
author = ""
views = 0
if views == 0 {
println("no one has read your blog yet")
} else {
println("\(author) has \(views)")
}
return(author, views!)
}
}
这是我遇到问题的功能
func randomViews(blog : BlogPost?) {
var vids = types[2]
if blog?.type == vids {
return nil
} else {
let viewCount : [Int] = [10, 20, 30, 40, 50]
var unsignedArrayCount = UInt32(viewCount.count)
var unsignedRandom = arc4random_uniform(unsignedArrayCount)
var random = unsignedRandom
switch (random) {
case 10:
println("Nil")
case 10, 20 :
println("0")
default:
random
}
}
}
我收到的错误是
"$T4?? does not conform to protocol '_RawOptionSetType'"
希望这比以前更清楚,希望你能提供帮助。 非常感谢
这里没有probs是我的类型数组
let types : [String] = ["technology", "memos", "animals"]
我没有删除Int并更新了博客类
中的类型var type = (arc4random_uniform(UInt32(types.count)))
基本上如果“动物”作为博客类型传入我需要返回零,否则什么也不做,只是继续。那么只需要知道哪种返回类型最好用?感谢
欢呼Rob好吧这就是我做的我刚刚创建了一个单独的函数来访问数组的随机元素
func randType() -> String {
var unsignedArrayCount = UInt32(types.count)
var unsignedrandom = arc4random_uniform(unsignedArrayCount)
var random = Int(unsignedrandom)
return types[random]
}
然后如你所说,不需要返回类型只需返回
func randomViews(blog : BlogPost?) {
var vids = types[2]
if blog?.type == vids {
//println("NIL")
return
} else {
let viewCount : [Int] = [10, 20, 30, 40, 50]
var unsignedArrayCount = UInt32(viewCount.count)
var unsignedRandom = arc4random_uniform(unsignedArrayCount)
var random = unsignedRandom
switch (random) {
case 10:
println("Nil")
case 10, 20 :
println("0")
default:
random
}
}
}
这似乎有效,所以我现在就去。对不起拖出来的帖子,但至少我挂在那里,没有退出并得到它(有点)谢谢
答案 0 :(得分:2)
您的randomViews
未指定返回类型:
func randomViews(blog : BlogPost?) -> UInt32? {
我认为它是UInt32?
,因为这是我在else
分支中看到的。
此外,else
分支缺少return
语句,我认为该语句应为random
。固定功能应如下所示:
func randomViews(blog : BlogPost?) -> UInt32? {
var vids = types[2]
if blog?.type == vids {
return nil
} else {
let viewCount : [Int] = [10, 20, 30, 40, 50]
var unsignedArrayCount = UInt32(viewCount.count)
var unsignedRandom = arc4random_uniform(unsignedArrayCount)
var random = unsignedRandom
switch (random) {
case 10:
println("Nil")
case 10, 20 :
println("0")
default:
random
}
return random
}
}
答案 1 :(得分:1)
有几点意见:
您已将BlogPost.type
定义为Int
。但我认为types
仍被定义为[String]
。你需要确保这两个匹配。
例如,既然您已将type
定义为Int
,那么您可能需要if blog?.type == 2
而不是if blog?.type == types[2]
。您不想将数字type
与字符串进行比较,而是将数字2
进行比较。
您尚未在randomViews
的定义中指定任何返回类型,但您尝试return nil
。您希望randomViews
返回什么(如果有的话)?确保您的函数的返回类型与您在return
语句中提供的内容相匹配。