gpt4 book ai didi

ios - 特定泛型类型参数的解决方法

转载 作者:可可西里 更新时间:2023-11-01 02:13:20 25 4
gpt4 key购买 nike

情况:

我有两个协议(protocol),一个带有静态方法:

protocol DataSourceable {
static func getMoreData<T: DataAccepting>(someObject: T)
}

protocol DataAccepting {
func accept(data: [Any])
}
extension DataAccepting where Self: UIViewController { }

编译正常。

一旦我定义了一个类型参数符合 DataSourceable 的类:

class SampleViewController<T: DataSourceable>: UIViewController {...}

我得到一个 Segmentation Fault: 11编译器崩溃。

    0  swift                    0x0000000112445b6d PrintStackTraceSignalHandler(void*) + 45
1 swift 0x00000001124455b6 SignalHandler(int) + 470
2 libsystem_platform.dylib 0x00007fffa4bd9bba _sigtramp + 26
3 libsystem_platform.dylib 0x0000000000000002 _sigtramp + 1531077730
4 swift 0x000000010f8bd5bd swift::irgen::emitCategoryData(swift::irgen::IRGenModule&, swift::ExtensionDecl*) + 2285
5 swift 0x000000010f8c2425 swift::irgen::IRGenModule::emitGlobalDecl(swift::Decl*) + 1189
6 swift 0x000000010f8c1e85 swift::irgen::IRGenModule::emitSourceFile(swift::SourceFile&, unsigned int) + 133
7 swift 0x000000010f98dfe2 performIRGeneration(swift::IRGenOptions&, swift::ModuleDecl*, swift::SILModule*, llvm::StringRef, llvm::LLVMContext&, swift::SourceFile*, unsigned int) + 1282
8 swift 0x000000010f85c1c7 performCompile(swift::CompilerInstance&, swift::CompilerInvocation&, llvm::ArrayRef<char const*>, int&, swift::FrontendObserver*) + 23687
9 swift 0x000000010f854265 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*) + 17029
10 swift 0x000000010f81182d main + 8685
11 libdyld.dylib 0x00007fffa49cd255 start + 1
12 libdyld.dylib 0x00000000000000c6 start + 1533226610
**More_Stuff**...
While emitting IR for source file /xx/xx/xx/xx/xx/xx/xx/SampleViewController.swift

最终目标是能够做到这一点:

class SampleViewController<T: DataSourceable>: UIViewController, DataAccepting {
var intArray = [Int]()
func setup() {
T.getMoreData(dataAcceptor: self)
}

func accept(data: [Any]) {
intArray = data
}
}

struct SampleModel: DataSourceable {
static func getMoreData<T: DataAccepting>(dataAcceptor: T) {
var anIntArray = [Int]()
someObject.accept(anIntArray)
}
}

然后制作一个SampleViewController<SampleModel> .这将允许我让 SampleModel 处理 Controller 的采购数据。 SampleModel 决定如何获取数据,然后使用 Controller 上的 accept() 函数将数据提供给 SampleController。

最佳答案

这似乎是一个编译器错误。但是,正如我们在 chat 中讨论的那样,您通常应该避免这种设计。 .

关于ios - 特定泛型类型参数的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40311858/

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