Skip to main content
 首页 » 操作系统

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

2024年01月01日45me-sa

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'" 

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

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

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