gpt4 book ai didi

swift - 将 Struct 传递给函数并在函数内创建该结构的实例

转载 作者:可可西里 更新时间:2023-11-01 00:56:22 25 4
gpt4 key购买 nike

我想创建一个接受结构类型的函数,并且在该函数内部,我想返回创建的结构的一个实例。

例如:

struct Person {
var name: String
func greet() {
print("Hi person \(self.name)")
}
}

struct Animal {
var name: String
func greet() {
print("Hi animal \(self.name)")
}
}

// T is the stuct type, so I can pass either Person or Animal.
// name is the name string.
func greet<T>(_ a: T, name: String) {
let thingToGreet: a = a(name: name)
thingToGreet.greet()
}

// Pass the struct type and a string.
greet(Person, name: "Johny")

这可能吗?在应用程序中,我想制作一个接受 URL 和结构类型的函数,然后在完成时我想返回根据数据任务请求创建的结构。

最佳答案

您需要使用协议(protocol)向编译器解释 A) 这些类型有一个 .name,B) 它们有一个 .greet() 函数,并且, 最后,C) 它们可以只用 name 初始化。然后在您的 greet() 全局函数中引用该协议(protocol)。最后一点是您传入了类型,并且显式调用了 init(name:)...

protocol HasName {
var name: String { get set }
func greet()
init(name: String)
}

struct Person: HasName {
var name: String
func greet() {
print("Hi person \(self.name)")
}
}

struct Animal: HasName {
var name: String
func greet() {
print("Hi animal \(self.name)")
}
}

// ** We demand T follows the protocol,
// ** & declare A is a type that follows the protocol, not an instance
func greet<T: HasName>(_ A: T.Type, name: String) {
let thingToGreet = A.init(name: name) // ** A(name: ) doesn't work
thingToGreet.greet()
}

// Pass the struct type and a string.
greet(Person.self, name: "Johny") // ** .self returns the type

关于swift - 将 Struct 传递给函数并在函数内创建该结构的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47031167/

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