如果某个类型在swift中传递给函数,则尝试返回nil

时间:2014-11-11 14:28:54

标签: ios objective-c swift return switch-statement

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

        }

      }

  }

这似乎有效,所以我现在就去。对不起拖出来的帖子,但至少我挂在那里,没有退出并得到它(有点)谢谢

2 个答案:

答案 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)

有几点意见:

  1. 您已将BlogPost.type定义为Int。但我认为types仍被定义为[String]。你需要确保这两个匹配。

    例如,既然您已将type定义为Int,那么您可能需要if blog?.type == 2而不是if blog?.type == types[2]。您不想将数字type与字符串进行比较,而是将数字2进行比较。

  2. 您尚未在randomViews的定义中指定任何返回类型,但您尝试return nil。您希望randomViews返回什么(如果有的话)?确保您的函数的返回类型与您在return语句中提供的内容相匹配。