gpt4 book ai didi

swift - 在 Swift 中,方法如何返回泛型类型?

转载 作者:行者123 更新时间:2023-11-28 11:19:22 24 4
gpt4 key购买 nike

我想要一个方法来返回 String 或 Int,如下面的方法所示。如何定义 * 类型?请注意,我不想返回一个元组,只是一个值。 :啤酒:

func returnsSomething(key: Bool) -> * {
if key == true {
return "Im a string!"
} else {
return 42
}
}
returnsSomething(true)

最佳答案

有两种选择。


首先,您可以将您的方法声明为返回类型 Any,这将允许您返回任何您想要的类型。

func returnsSomething(key: Bool) -> Any {
if key {
return "I'm a string"
} else {
return 42
}
}

这会很好地工作,但它有一个缺点,如果你使用隐式类型定义:

let foo = returnsSomething(true)

那么 foo 的类型将不是 StringInt,而是 Any,而你'剩下可选的向下转型。

let foo = returnsSomething(true)
if let bar = foo as? Int {
// use bar as an Int
} else if let bar = foo as? String {
// use bar as a String
}

请注意,您实际上不必在此处使用 Any。例如,如果你想返回一个 UIViewUIButtonUITableView,你可以使用 UIView,因为后两者都是 UIView 的子类。


其次,你可以使用方法重载:

func returnsSomething() -> String {
return "I'm a string!"
}

func returnsSomething() -> Int {
return 42
}

这行得通,但是现在您根本不能用这种方法使用隐式类型。请注意,以下会产生错误:

let foo = returnsSomething()

Ambiguous use of 'returnsSomething'

但是,如果我们明确指定了类型,那么这是允许的:

let fooString: String = returnsSomething()
let fooInt: Int = returnsSomething()

并且编译器非常满意。

关于swift - 在 Swift 中,方法如何返回泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29617011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com