gpt4 book ai didi

swift - 协议(protocol)方法的不同返回类型

转载 作者:搜寻专家 更新时间:2023-10-31 21:59:35 24 4
gpt4 key购买 nike

我想要一个定义一些方法和属性的协议(protocol)。但是,属性类型和方法返回类型在符合所述协议(protocol)的不同类之间可能会有所不同。例如:A.getContent() 可能返回类型为 String 的值,但是 B.getContent() 可能返回类型为 整数。在下面的示例中,我使用了 Any 类型。这在 Swift 中是否可行,或者这是一种完全错误的方法?也许使用泛型?

protocol Content {
func getContent() -> any
}

class A: Content {
func getContent() -> String {
return "Im a String"
}
}

class B: Content {
func getContent() -> Int {
return 1234
}
}

最佳答案

我认为您正在研究协议(protocol)中的泛型。您可以使用 associatedtype 动态关联一个类型,例如

protocol Content{
associatedtype T
func getContent()-> T
}

class A: Content {
func getContent() -> String {
return "Hello World"
}
}

class B: Content {
func getContent() -> Int {
return 42
}
}

A().getContent() //"Hello World"
B().getContent() //42

如果你看这个例子,当你把 Type 放在 Content 的类 sun 中的函数之后时,协议(protocol) Content 就是这个类型

更新

我正在使用“swiftly”语法而不是传统的 getContent 放置另一个示例。

protocol Content{
associatedtype T
var content:T { get }
}

class A: Content {
var content:String{
return "Hello World"
}
}

class B: Content {
var content:Int{
return 42
}
}

A().content //"Hello World"
B().content //42

关于swift - 协议(protocol)方法的不同返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40290823/

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