Ios 如果某个类型传递给swift中的函数,则尝试返回nil
您好,我之前问了一个问题,我把这个问题弄得一团糟,所以我重新发帖了。如果某一类型的博客文章被传递到我的函数中,我需要做的是返回nil 这是我要传递的类实例Ios 如果某个类型传递给swift中的函数,则尝试返回nil,ios,objective-c,swift,return,switch-statement,Ios,Objective C,Swift,Return,Switch Statement,您好,我之前问了一个问题,我把这个问题弄得一团糟,所以我重新发帖了。如果某一类型的博客文章被传递到我的函数中,我需要做的是返回nil 这是我要传递的类实例 class BlogPost { var type = Int(arc4random_uniform(UInt32(types.count))) var views : Int? var author : String var email : String var order : Int = 0
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'"
希望这比以前更清楚,希望你能帮忙。
非常感谢
没问题这是我的类型数组
let types : [String] = ["technology", "memos", "animals"]
我还没有删除Int并更新blog类中的类型
var type = (arc4random_uniform(UInt32(types.count)))
基本上,如果“动物”作为博客类型传入,我需要返回nil,否则什么也不做,继续。所以只需要知道哪种返回类型最适合使用?谢谢
干杯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
}
}
}
这似乎有效,所以我现在就同意。很抱歉,这篇文章拖得太长了,但至少我坚持了下来,没有退出并开始(有点)感谢你的
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
}
}
以下是几点观察:
BlogPost.type
定义为Int
。但是我假设类型
仍然被定义为[String]
。你需要确保这两个匹配
例如,现在您已经将type
定义为Int
,您可能希望if blog?.type==2
而不是if blog?.type==types[2]
。您不想将数字类型
与字符串进行比较,而是与数字2
进行比较
随机视图的定义中指定任何返回类型,但尝试执行返回nil
。您希望randomView
返回什么(如果有的话)?确保函数的返回类型与return
语句中提供的返回类型匹配
我认为,
random
与数组对象中的一个相比较,所以它应该是random=viewCount[unsignedRandom]
,对吗?对-RawOptionSetType
是少数零文字可转换的类型之一,因此,它在return nil
行的错误中被标记。不用担心,它仍然无法工作,只是不确定返回类型应该是什么。当你刚开始的时候,这一整天都很令人沮丧。如果选择了那个特定的博客文章,我想返回nil。我会明白的在你的代码中有两个完全不同的问题。一个是比较(您应该将数字类型
与数字2
进行比较,而不是与字符串类型[2]
进行比较)。第二个是函数的返回类型。我在这里没有看到任何迹象表明调用者需要randomView
函数的返回值,因此我会让它保持原样,没有返回类型,并将return nil
更改为justreturn
。在default
子句中,您只有random
。你是说println(随机)
?您想在这行中使用random
做什么?