Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如果某个类型传递给swift中的函数,则尝试返回nil_Ios_Objective C_Swift_Return_Switch Statement - Fatal编程技术网

Ios 如果某个类型传递给swift中的函数,则尝试返回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

您好,我之前问了一个问题,我把这个问题弄得一团糟,所以我重新发帖了。如果某一类型的博客文章被传递到我的函数中,我需要做的是返回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并更新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
    更改为just
    return
    。在
    default
    子句中,您只有
    random
    。你是说
    println(随机)
    ?您想在这行中使用
    random
    做什么?