首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >特定泛型类型参数的解决方法

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

Stack Overflow用户
提问于 2016-10-28 19:18:21
回答 1查看 109关注 0票数 2

情况:

我有两个协议,一个使用静态方法:

代码语言:javascript
运行
复制
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和编译器崩溃。

代码语言:javascript
运行
复制
    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

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

代码语言:javascript
运行
复制
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处理为控制器获取数据的问题。SampleModel决定如何获取数据,然后在控制器上使用accept()函数,它可以将数据提供给SampleController。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-29 00:45:03

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40311858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档