当前位置: 首页 > 面试题库 >

如何将在已编译的.swiftmodule中声明的swift函数导入另一个swift文件?

安高义
2023-03-14
问题内容

有没有一种方法可以在.swift文件(已编译为.swiftmodule)中声明函数,如下所示:

你好迅捷

func hello_world() {
    println("hello world")
}

主Swift

import hello

hello.hello_world()

我还用这两个文件制作了一个git
repo,并准备好了带有compile /
link命令的Makefile

。目前,我可以获取main.swift来导入问候,但是当前无法链接…是否可以传递另一个链接器标志?当前的Makefile是:

PWD=$(shell pwd)
APP_NAME=main
MODULE_NAME=hello
SWIFT_MODULE_PATH=$(PWD)/$(MODULE_NAME).swiftmodule
SDK=/Applications/Xcode6-Beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk


main : clean
xcrun swift $(MODULE_NAME).swift -emit-module -v
xcrun swift $(APP_NAME).swift \
    -o $(APP_NAME) \
    -sdk $(SDK) \
    -I $(PWD) \
    -Xlinker -sectalign \
    -Xlinker __SWIFT \
    -Xlinker __ast \
    -Xlinker 4 \
    -Xlinker -sectcreate \
    -Xlinker __SWIFT \
    -Xlinker __ast \
    -Xlinker $(SWIFT_MODULE_PATH) \
    -v

问题答案:

.swiftmodule描述Swift模块的接口,但其中不包含模块的实现。仍需要一个库或一组目标文件来链接您的应用程序。这是makefile的修改版本,可同时创建libhello.dylib和hello.swiftmodule并针对它们构建应用程序:

PWD=$(shell pwd)
APP_NAME=main
MODULE_NAME=hello
LIB_NAME=lib$(MODULE_NAME).dylib
LIB_PATH=$(PWD)/$(LIB_NAME)
SWIFT_MODULE_PATH=$(PWD)/$(MODULE_NAME).swiftmodule

main : clean
    xcrun swift \
        -emit-library \
        -o $(LIB_PATH) \
        -Xlinker -install_name \
        -Xlinker @rpath/$(LIB_NAME) \
        -emit-module \
        -emit-module-path $(SWIFT_MODULE_PATH) \
        -module-name $(MODULE_NAME) \
        -module-link-name $(MODULE_NAME) \
        -v \
        $(MODULE_NAME).swift
    xcrun swift $(APP_NAME).swift \
        -o $(APP_NAME) \
        -I $(PWD) \
        -L $(PWD) \
        -Xlinker -rpath \
        -Xlinker @executable_path/ \
        -v


clean :
    rm -rf $(APP_NAME) $(LIB_NAME) $(MODULE_NAME).swiftmodule $(MODULE_NAME).swiftdoc

在没有文档的情况下,我不能说这是完全正确的,但是可以。

请注意,如果您只是想在您的应用程序模块中使用多个源文件,则这要简单得多,并且不需要import在main.swift中声明或进行模块限定:

swift -o main hello.swift main.swift


 类似资料:
  • 问题内容: 我只是想从另一个文件中加入我的Swift类,例如它的测试 PrimeNumberModel.swift PrimeNumberModelTests.swift 两个swift文件都在同一目录中。 问题答案: 我的文件中也遇到了同样的问题,但常规项目文件中却没有。 摆脱: 使用未解析的标识符“ PrimeNumberModel” 我需要测试文件中的基本模块。在我的情况下,我的 目标 称为

  • 问题内容: 如果我在Swift中需要自定义类型,可以,该怎么办?(类似于闭包语法typedef) 问题答案: 使用关键字代替

  • 问题内容: 我将Xcode升级到8.1 GM,现在遇到SwiftyJSON的以下错误。其他导入的框架似乎可行。在SwiftyJSON升级其框架之前,是否有办法强迫它在Swift 3中工作?我用迦太基来导入/更新框架。我也尝试将“ 打开”和“关闭” 更改为无效。 使用Swift 3.0编译的模块无法在Swift 3.0.1中导入:Modules / SwiftyJSON.swiftmodule /

  • 问题内容: 但是我已经使用相同的Xcode重新编译了框架,但它仍然给我这个错误。 两者的基本SDK iOS 11.1 两种的Swift语言版本Swift 4.0 不使用豆荚/迦太基 我希望有人会知道 问题答案: 更新: 对于Xcode的发行版本: 当使用Xcode 9.1、9.2、9.3、9.4、10等打开使用早期Xcode工具构建的框架的项目时,将发生此错误(以及与Swift 4.1、4.2等类

  • 问题内容: 我有一个使用Xcode 10.3构建的VoiceSampler.framework 我正在尝试在新项目的Xcode11中使用该框架。我已经成功添加了该框架,但是当我用AppDelegate 编写时,出现以下错误: 使用Swift 5.0.1编译的模块无法由Swift 5.1编译器导入:/Users/apple/Projects/CaptureAppSwift/VoiceSampler.

  • 问题内容: 我正在尝试按照指令https://github.com/Paytm- Payments/Paytm_iOS_App_Kit/tree/master/Swift/BitCodeDisabled/PaytmNativeSDK将 第三方应用程序集成到项目中 我在构建中看到以下错误 Swift 5.0编译器无法导入使用Swift 4.2.1编译的模块 我尝试了工具链https://medium