如果某个类型传递给Swift中的函数,你如何返回nil?

时间:2014-11-11 11:14:46

标签: ios random swift switch-statement return-type

好的,所以如果某个类型传递给我的函数,我会尝试返回nil。在这种情况下,我传递了我的班级实例" BlogPost"和博客中的一种类型。我还有一个名为" types"我已将变量视频分配给该数组的最后一个索引。如果这个类型传递给我的函数我想返回nil(所以假设我需要一个可选的返回可能的nil)这是我到目前为止: -

enter image description here

所以总而言之,我需要传递我的博客帖子的实例,但如果传入某种类型,则总是返回nil。希望这是有道理的


更新:

types数组的定义如下:

let types : [String] = ["technology", "Fashion", "Animals"]

这是我在函数中引用的数组。基本上,如果数组的最后一个条目输入到函数中,我需要返回nil

确定这是博客帖子它实际上有一个类型为

的空字符串

enter image description here

很好,所以即时通讯我现在所做的就是更改blogpost.type随机选择一个。所以现在如果从这个数组中选择specfic类型,我怎么能这样做仍然会出错。这是我更新的内容

enter image description here

所以现在我需要做的就是访问该数组中的2类型,如果我访问它,则返回nil。有什么想法吗?所以拖动它谢谢

2 个答案:

答案 0 :(得分:2)

我认为你不能。您可以创建可执行的初始化程序,它可以满足您的需要但不能在正常功能下使用它。

最好的解决方案是返回可选的Int或String,当你调用函数时,只需检查nil的结果并做你需要做的事情,否则忽略它:

func randomViews(blog : BlogPost.Type) -> Int? {
    case 10:
    return nil
    case 10, 20 :
    return 0
    default:
    random

}

if (randomViews(parameter) == nil) {
    //function returned nil
}

您显示错误是因为您将可选博客与视频进行比较,您必须先将其解包,例如,如果您确定博客始终使用了值:

if blog! == Videos

如果不确定使用更安全:

if let blg = blog {
    if blg == Videos {
}
else {
    // blog has not have a value
}

答案 1 :(得分:1)

您正在将blog作为BlogPost.Type参数传递。这是不正确的。您应该只是将String参数传递给它,或者您可以将BlogPost本身传递给它:

func randomViews(blog: BlogPost) {
    let videos = types[2]

    if blog.type == videos {
        // do whatever you want
    }

    // carry on
}

与您手头的问题无关,但请注意,在定义let时,我使用var代替videos。如果值不会(也不会)改变,请始终使用let

另请注意,我在v中使用小写字母videos,因为Cocoa命名约定规定变量通常以小写字母开头,而类型,类,结构和枚举通常以大写字母开头。