无法调用非功能模块<f1>的值

时间:2016-11-22 13:54:05

标签: ios module frameworks swift3

我创建了一个Swift框架,只是一个简单的测试。

Swift文件(F1.swift)代码:

public class F1{

    public init(){
        print("inited")
    }

    public func call(){
        print("called")
    }

}

然后,我构建了框架,并将其导入另一个项目。

我试着这样使用它:

import F1
<{1}}的{​​{1}}中的

viewDidLoad

F1.framework被拖下:

  • 一般&gt;嵌入式二进制文件
  • 一般&gt;链接的框架和二进制文件

我也可以在下面看到它:

  • 构建阶段&gt;链接库与二进制文件
  • 构建阶段&gt;嵌入框架

XCode“反应”:UIViewController语句没有问题。

我确实收到了实例化类的错误:

无法调用非功能模块的值......

我错过了什么吗?

[更新]基于一些在线资源和其他一些测试,我认为问题在于构建设置:例如。 仅构建活动架构可能会涉及,但理解如何以及为什么会很有趣。

找到最小样本Xcode项目here

2 个答案:

答案 0 :(得分:0)

使用您发布的代码可在此处获得预期结果:

inited
called

答案 1 :(得分:-1)

在您的示例中,您已将模块F1中的单个类命名为与模块相同的名称,即F1。很可能Swift无法区分模块命名空间和模块中类的实际名称,因此当您只编写F1时,Swift可能会推断它是一个显式的命名空间注释;引用名称空间F1(由您导入的模块F1提供)。命名空间当然不能被视为一种类型,这可以解释您提示的错误消息([强调我的])

  

无法调用非功能'模块的值...'

您可以通过在调用中包含模块名称空间及其(单个)类类型来显式调用类F1的模块F1的初始化程序来测试此理论:

var c = F1.F1()