如何在带有 SwiftPM 的 Objective-C 模块中使用 Swift 模块?

Posted

技术标签:

【中文标题】如何在带有 SwiftPM 的 Objective-C 模块中使用 Swift 模块?【英文标题】:How to use a swift module in an objective-c module with SwiftPM? 【发布时间】:2016-12-13 13:55:50 【问题描述】:

这里是根目录的例子

├── Package.swift
└── Sources
    ├── Objc-cli
    │   └── main.m
    └── Swifty
        └── MyStruct.swift

Swifty 模块只是一个简单的结构体

// MyStruct.swift

public struct MyStruct 
    public var text = "Hello, World!"

    public init() 
    

Objc-cli 中,我尝试像这样链接 swift 模块。

// main.m

#import <Foundation/Foundation.h>
@import Swifty <---- Not found

int main() 
    NSLog(@"Hello from Objc");
    return 0;

这是Package.swift 的样子:

// Package.swift

import PackageDescription

let package = Package(
    name: "MyTest",
    targets: [
        Target(name: "Swifty", dependencies: []),
        Target(name: "Objc-cli", dependencies: ["Swifty"]),
    ]
)

遗憾的是,编译器无法识别objective-c 模块中的Swifty 模块。这是输出:

$ swift build
Compile Swift Module 'Swifty' (1 sources)
Compile Objc-cli main.m
/tmp/TestPackage/Sources/Objc-cli/main.m:10:9: fatal error: module 'Swifty' not found
@import Swifty
 ~~~~~~~^~~~~~
1 error generated.
<unknown>:0: error: build had 1 command failures

我错过了什么还是现在根本不可能?

【问题讨论】:

你试过删除@import Swifty吗? @masters3d 我正在尝试将 swift 模块导入到 Objective-c 模块中。删除导入的目的是什么? 如果obj-c模块是swift包内的Test包,则不需要导入。 @masters3d objc 测试似乎不受 SPM 支持。我明白了:还不支持测试。:文件 /Library/Caches/com.apple.xbs/Sources/swiftpm/swiftpm-11750/Sources/Build/Command.link(ClangModule).swift,第 48 行 [1] 47975非法硬件指令 swift test 你还有什么建议吗? 新版本即将推出。 github.com/apple/swift-package-manager/pull/850 【参考方案1】:

目前无法在 C 模块中导入 Swift 模块,它只能以另一种方式工作,将 C 导入 Swift。

您可以在 SwiftPM -C language targets找到详细信息

【讨论】:

链接是404ing,基页在这里:github.com/apple/swift-package-manager/tree/master/… 更新了链接,这里是github.com/apple/swift-package-manager/blob/master/…

以上是关于如何在带有 SwiftPM 的 Objective-C 模块中使用 Swift 模块?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 SwiftPM 的 ObjC 模块中导入 AppKit

将框架从 SwiftPM 嵌入到 Cocoa 应用程序 (XCODE)

如何在 Objective-C 上发送带有参数的通知?

如何在Objective-C中以编程方式发送带有一些正文文本的短信[重复]

如何在 Objective-C 中将带有补充视图的标题添加到 UiCollectionView?

如何发送带有 HTTP HEADERS 的 PUT 请求和带有 Objective-C 的 FILE?