繁体   English   中英

如果将特定类型传递给Swift中的函数,如何返回nil?

[英]how do you return nil if a certain type is passed to a function in Swift?

好的,所以如果要将某种类型传递给函数,我将尝试返回nil。 在这种情况下,我传入了我的类“ BlogPost”的实例以及此博客文章中的类型。 我还有一个名为“类型”的数组,并且已将变量Video分配给该数组的最后一个索引。 如果将此类型传递给我的函数,我想返回nil(因此假设即时通讯在这里需要一个可选的函数来返回可能的nil),这就是我到目前为止的内容:

在此处输入图片说明

因此,总而言之,我需要传递我的博客文章的一个实例,但如果传入某种类型,则始终返回nil。希望这有意义


更新:

types数组的定义如下:

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

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

确保这是博客文章,实际上确实有一个用于类型的空字符串

在此处输入图片说明

太好了,即时通讯工具我现在要做的就是更改blogpost.type以随机选择一个。 因此,现在,如果从该数组中选择特定类型,我该怎么做仍然会出现错误。 这是我已更新为

在此处输入图片说明

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

我认为你不能。 您可以创建满足您需要的故障初始化程序,但不能将其与常规功能一起使用。

最好的解决方案是返回可选的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
}

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

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

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

    // carry on
}

与您的问题无关,但请注意,定义videos时,我使用let而不是var 如果值不会(也不能)更改,请始终使用let

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM