【问题标题】:trying to return nil if a certain type passed to function in swift如果某种类型在 swift 中传递给函数,则尝试返回 nil
【发布时间】:2014-11-11 14:28:53
【问题描述】:

您好,与较早的问题有关,我在重新发布时弄得一团糟。如果将某种类型的博客文章传递到我的函数中,我需要做的是返回 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'"

希望这比以前更清楚,并希望您能提供帮助。 非常感谢

这里没有问题是我的类型数组

let types : [String] = ["technology", "memos", "animals"]

我还没有删除 Int 并更新博客类中的类型

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

        }

      }

  }

这似乎行得通,所以我现在就去。抱歉,帖子拖了后腿,但至少我坚持住了,没有退出并继续(有点)谢谢

【问题讨论】:

  • 在您的default 子句中,您只有random。你的意思是println(random)?你想对这条线上的random 做什么?

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


【解决方案1】:

您的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
    }
}

【讨论】:

  • 而且我认为random与其中一个数组对象相比,所以应该是random = viewCount[unsignedRandom]吧?
  • 对 - RawOptionSetType 是少数零文字敞篷车之一,因此它会在 return nil 行的错误中被标记。
【解决方案2】:

几个观察:

  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 语句中提供的类型相匹配。

【讨论】:

  • 不用担心仍然无法让它工作,只是不确定返回类型应该是什么。当你开始的时候,整天都在做这件事,所以很沮丧。如果选择了特定的博客文章,我想返回 nil 。我会到达那里
  • 您的代码中有两个完全不同的问题。一是比较(您应该将您的数字type 与数字2 进行比较,而不是与字符串types[2] 进行比较)。第二个是函数的返回类型。我在这里看不到任何迹象表明调用者需要来自 randomViews 函数的返回值,所以我将保留它,没有返回类型,并将 return nil 更改为 return
猜你喜欢
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
相关资源
最近更新 更多