【问题标题】:use of @import when modules are disabled禁用模块时使用@import
【发布时间】:2015-06-24 10:46:48
【问题描述】:

我有问题

@import Foundation;

我看到了:
@import vs #import - iOS 7

我将“启用模块”设置为“是”

我的问题没有解决

【问题讨论】:

  • 你有什么问题?
  • 你的问题肯定是你的答案?我认为您必须启用模块才能使用@import?
  • 不幸的是,@importnot supported yet 对于 .mm 文件,或者更确切地说是 Objective-C++(我测试了 g++clang++,因为我真的很想使这项工作)。

标签: ios xcode import module


【解决方案1】:

每当我尝试添加 @import SafariServices; 语句时,我都会在零 swift 项目中收到此警告。

解决方案: 启用模块。 转到 Target > Build Settings 并将 Enable Modules(C 和 Objective-C 模块)设置为 YES

注意:我还没有验证这个潜在的解决方案,但如果这个解决方案有副作用,可能值得考虑。

我们可以为正在导入 c++ 文件的特定文件启用模块,而不是为整个项目启用模块。转到构建阶段 -> 编译源 -> 选择文件 -> 添加编译器标志-fmodules

【讨论】:

  • 谢谢!为我工作。 PS:你忘了审查你的目标名称:-)
  • 谢谢@Josh,非常感谢。
  • 令我惊讶的是,这并没有解决我的问题。然后在我确信这是正确的想法用尽之后,我重新启动了 Xcode (9.2),然后它工作得很好。叹息。
  • Xcode 9.3,遇到同样的问题,做了同样的事情,碰巧读到了 Snell 先生的笔记,退出 Xcode 并打开,这样就完成了解决方案。 (坏 Xcode 狗坏 :-)
  • 感谢 Peter - 我一直在尝试更新旧应用程序上的 parse 和 parse/ui 以将其移动到 sashido,我正在撞墙说 PF 的东西都不起作用!
【解决方案2】:

我一直在混合使用 ObjC、ObjC++、C++ 和 Metal。每当我得到“禁用模块时使用@import”时,我都会尝试 替换:

@import Name; 

与:

#import "Name/Name.h"

示例,替换:

@import Metal;
@import MetalKit;
@import CoreVideo;

与:

#import "Metal/Metal.h"
#import "MetalKit/MetalKit.h"
#import "CoreVideo/CoreVideo.h"

它似乎有效。

【讨论】:

  • 谢谢!将@import GoogleMobileAds; 替换为#import "GoogleMobileAds/GADBannerView.h" 也适用于我
【解决方案3】:

检查您是否在 .mm 文件或 objc 文件以外的任何其他文件中的某处使用了 #import "ProductName-Swift.h"

因为如果您在 cpp 文件中使用此导入,则模块会自动禁用。

【讨论】:

    【解决方案4】:

    可能的原因是您使用了 Objective-C++。然后,尽管构建设置正确,模块仍会被禁用。

    【讨论】:

    • 我曾经在项目中有 .mm 文件。他们已经不在了。我仔细检查了 - 项目中没有 .mm 文件。另外,我已经完成了这个线程中已经描述的所有事情。仍然得到同样的错误。在所有目标上启用模块。基础是进口的。我检查了所有源文件的文件类型,它们是 Objective-C,而不是 Objective-C++。有什么建议吗?
    • 我注意到这个问题是由将框架(使用@import Foundation)导入 .mm 文件引起的
    • 我正在使用 Obj-C++,并面临同样的问题。我该怎么办?
    • 你应该创建一个使用 @import 的 Obj-C 包装器(如果你真的需要的话)
    • 一百倍!我从 MyFramework.h 中删除了 @import Foundation,它现在可以工作了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多