函数应该返回字符串或数组

时间:2016-02-02 16:48:21

标签: ios swift swift2

我有一个应该返回StringArray的函数:

func someFunc(isList:Bool=false) -> AnyObject {
        if isList {
            var results:[AnyObject] = [11, "123", [], "22"]
            return results
        } else {
            var result = "123"
            return result
        }
    }

但是编译器说:

  

返回'[AnyObject]'类型的表达式不符合   'AnyObject'

3 个答案:

答案 0 :(得分:1)

您的结果变量必须是AnyObject类型而不是[AnyObject]。基本上,您需要将AnyObjects数组转换为单个AnyObject

func someFunc(isList:Bool=false) -> AnyObject {
    if isList {
        var results: AnyObject = [11, "123", [], "22"]
        return results
    } else {
        var result = "123"
        return result
    }
}

答案 1 :(得分:0)

“AnyObject”是任何对象。 [AnyObject]是一个数组,数组是值,而不是对象。您尝试返回的另一个值是一个字符串,它也是一个值,而不是一个对象。

你的函数应该返回Any,或者更好的是枚举两个案例,一个案例[Any]和一个案例String。

答案 2 :(得分:0)

你能让它回归吗?

func something(list: Bool = false) -> Any {
  if list {
    return [11, "123", [], "22"]
  } else {
    return "123"
  }
}

let result = something(true)
let result0 = something(false)

任何可以表示任何类型的实例,包括函数类型。

Apple文档建议不要以这种方式使用 Any 协议。

  

注意:仅当您明确需要它们提供的行为和功能时才使用Any和AnyObject。最好具体了解您希望在代码中使用的类型。

Apple Reference