【问题标题】:how do you return nil if a certain type is passed to a function in Swift?如果将某种类型传递给 Swift 中的函数,你如何返回 nil?
【发布时间】:2014-11-11 11:14:45
【问题描述】:

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

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


更新:

types 数组定义如下:

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

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

确定这是一篇博文,它的类型确实有一个空字符串

太好了,所以我现在要做的是更改 blogpost.type 以随机选择一个。所以现在如果从这个数组中选择特定类型,我会怎么做,仍然会出错。这是我更新的内容

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

【问题讨论】:

  • 您能否编辑您的问题并向我们展示Type 属性的定义?同样,你能告诉我们这个types数组的定义吗?通常你会在这些情况下使用enum 类型。或者你是动态构建types的数组?
  • 刚刚添加。 BlogPost 中的 type 属性只是一个空字符串
  • 好的。你能告诉我们TypeBlogPost 是如何定义的吗?无论如何,如果它是 nil 或空字符串,那么您要么 (a) 需要更改设置此值的代码,以确保将其设置为 types 数组中的三个可用值之一;和/或 (b) 如果 BlogPost.Type 不是您期望的值之一,请编写您的 randomViews 代码来处理它。
  • @RichyGarrincha BlogPost.Type 并不意味着我认为你认为的意思。如果您的blog 参数旨在成为String 值,您将与types 数组值进行比较,则将blog 参数定义为String,而不是BlogPost.Type。此外,如果您将此参数定义为可选参数(例如 String?),请确保正确测试和处理 nil 值。
  • 好的,谢谢,我是新来的,仍在处理发布问题将作为一个新问题发布,这更清楚我需要什么谢谢

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您将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,因为 Cocoa 命名约定规定变量通常以小写字母开头,而类型、类、结构和枚举通常以大写字母开头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      相关资源
      最近更新 更多