好的,所以如果某个类型传递给我的函数,我会尝试返回nil。在这种情况下,我传递了我的班级实例" BlogPost"和博客中的一种类型。我还有一个名为" types"我已将变量视频分配给该数组的最后一个索引。如果这个类型传递给我的函数我想返回nil(所以假设我需要一个可选的返回可能的nil)这是我到目前为止: -
所以总而言之,我需要传递我的博客帖子的实例,但如果传入某种类型,则总是返回nil。希望这是有道理的
更新:
types
数组的定义如下:
let types : [String] = ["technology", "Fashion", "Animals"]
这是我在函数中引用的数组。基本上,如果数组的最后一个条目输入到函数中,我需要返回nil
确定这是博客帖子它实际上有一个类型为
的空字符串
很好,所以即时通讯我现在所做的就是更改blogpost.type随机选择一个。所以现在如果从这个数组中选择specfic类型,我怎么能这样做仍然会出错。这是我更新的内容
所以现在我需要做的就是访问该数组中的2类型,如果我访问它,则返回nil。有什么想法吗?所以拖动它谢谢
答案 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命名约定规定变量通常以小写字母开头,而类型,类,结构和枚举通常以大写字母开头。