问题标签 [swift-compiler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
429 浏览

swift - “-c”选项对 Swift 编译器 (swiftc) 有什么作用?

我注意到里面有“-c”选项swiftc,这个选项有什么作用?

迅速... -c ....

有这方面的官方文件吗?man我在网上或网上找不到它--help:(

0 投票
2 回答
414 浏览

swift - 为什么一个简单的 Swift 算术运算编译得这么慢?

为了优化我的应用程序的构建时间,我将以下内容添加到我的OTHER_SWIFT_FLAGS

我收到了一个关于这种特定类型检查速度慢的警告,我不知道我是否可以在这里以某种方式帮助编译器。

var delay: TimeInterval = TimeInterval(index) * 0.05

有什么建议可以加快这种基本算术运算的编译时间吗?

我正在使用 Swift 5 运行 Xcode 11.5

Xcode 截图

还尝试将数字显式转换为TimeInterval,这是不需要的,因为默认情况下所有数字都是双精度数。 在此处输入图像描述

0 投票
1 回答
1285 浏览

ios - 命令 CompileSwiftSources 失败,退出代码为非零。命令 PrecompileSwiftBridgingHeader 因非零退出代码而失败

在此处输入图像描述我得到了我的计数目标和其他与通知相关的目标。我尝试了整个模块的编译模式,但没有帮助。

这是问题列表。

0 投票
0 回答
192 浏览

swift - 如何正确地将按键发送到 BG 应用程序,而 swift 脚本和编译的 swiftc 二进制文件之间没有区别

有一个swift名为的小脚本skey.swift,即使它们不处于活动状态(例如它们在后台),也会通过它们的PID(进程 ID)将按键发送到进程中。

测试用例:

  • 让我们说运行TextEdit.appNotes.app
  • ps axu | grep -E 'MacOS/(TextEdit|Notes)'- 示例中记下他们的 PID
  • 记住PID:87756 83077
  • 从终端运行swift skey.swift 87756 83077
  • 两个应用程序窗口(TextEdit 和 Notes)中出现“1”,即使它们在后台(终端在活动应用程序中)。
  • 所以,脚本按预期工作!

问题

  • 编译脚本swiftc skey.swift
  • 使用相同的参数运行编译后的二进制文件,例如./skey 87756 83077
  • 只有第一个 PID 获得“1”(在这种情况下,仅在注释中)

为什么运行脚本之间有这样的区别:

  • swift skey.swift 87756 83077
  • 或者./skey 87756 83077

编辑

刚刚 在这个源代码中找到了 一个评论

所以,开始尝试usleep自己。50µs 无济于事,但使用2x1000µs HELPED,最后编译和解释版本的工作方式完全相同。

所以,这行得通

但是,作为谈论“愚蠢方式”的评论 -很高兴知道正确的方式,因为代码应该在任何 macOS 中工作......

编辑 2

根据@willeke的评论,我尝试了以下

它按预期工作。看来事件发送过程一定存在,否则他的所有事件都被丢弃。

0 投票
1 回答
108 浏览

swift - 为什么我会收到此警告以在符合默认实现的协议的类型上实现“hash(into:)”

下面的代码显示了警告:

枚举 PlaybackSpeed 应该具有默认实现的函数resetSettings()& hash(into:),因此不应生成此警告。

我的理解是错误的还是编译器错误?

0 投票
0 回答
42 浏览

swift - Swift:ARC 如何处理匿名对象?

ARC 多年前出现以取代痛苦的 MRC,但由于 ARC 只是一种编译器技术,它的魔力发生在编译时。所以,基本上它的作用 - 在适当的地方自动插入retainrelease调用。所以,现在我的问题来了 - ARC 如何处理以下示例

对象是用创建的ref count == 1(据我所知,至少在旧的 MRC objcallocnewcopy在哪里调用retain。如果我错了,请纠正我),所以编译器必须减少这些对象的引用计数才能释放它们?但是这是如何完成的,因为这些对象实际上没有引用,它们是匿名的!我假设编译器可能会做以下优化

我的意思是编译器将引用匿名对象,以便能够调用release它。但是,我不确定这正是它的工作原理!那么,有人可以解释一下在这种情况下实际发生了什么吗?
亲切的问候,
安德烈

0 投票
0 回答
30 浏览

ios - Swift 编译器的意外行为——可能

我正在做一个 WatchKit 应用程序,我遇到了一个非常奇怪的行为,我认为这可能与 WatchKit 无关,但是编译器的行为有些奇怪,虽然不确定编译器是否是罪魁祸首,但这就是我的怀疑。

场景基本上是这样的:用户点击手表应用程序上的一个按钮,手表应用程序使用WCSession.default.sendMessage如下方式发送消息:

然后 iOS 应用程序收到消息session:didReceiveMessage:(我已经确认每次都会被调用)并发回消息:

好的,这可行,我在sendMessage函数的结果闭包中得到消息。好的。但是编译器抱怨并给了我一个轻微的警告

在此处输入图像描述

好的,谢谢你提醒我。我可以通过 a 轻松做到这一点as Any(这是 XCode 向我推荐的)并且是有道理的,因为警告听起来像这样 = 表达式被“隐式”强制从String?to Any,我们只是让它显式。好的,现在像这样传递值,这样我们就可以得到 XCode 的黄色闪亮剑的保护(大警告的隐喻)

即使考虑到 Xcode 给出的消息,我也不认为这会导致实际运行的逻辑产生(大)差异,它只会通过明确地执行已经明确的操作来使警告静音 在此处输入图像描述

事实证明,如果我这样做as Any,函数中手表应用程序上的结果闭包sendMessage将不会被调用,它的错误闭包也不会被调用。什么都没有发生,等待它的死亡天使杀死进程(或者如果你有一个保留周期,则不会)。但是,这让我想,是不是我严重误解了什么?当 Xcode 消息说它是隐式执行时,它是否不准确,所以让我们明确地执行它?

我尝试了 20 次,以确保它不是连接错误或某事。实际上只是因为那as Any部分,这很奇怪。

0 投票
1 回答
71 浏览

ios - 只告诉 Swift 编译器方法为 swift

我有一个这样定义的快速类:

里面有很多方法可以用于objective-c,所以我@objcMembers直接使用for类前缀,然后swift编译器开始抱怨这个:

方法 'concat' 与 Objective-C 选择器 'concat:' 与先前使用相同 Objective-C 选择器的声明冲突

它们具有完全相同的函数签名,但后者即使暴露也仅可用于 swift。现在我正在寻找一些编译标志来将后一种concat方法标记为swift 只是为了告诉编译器忽略冲突错误。

@objc@objcMembers明确地做到这一点,那么如何扭转呢?

0 投票
1 回答
48 浏览

swift - 使用 -O 时 swiftc 编译时间比不使用时更慢

我研究过 swift 编译器 ( swiftc ) 我只是制作了一个关于排序算法的 swift 文件。(基数,合并,快速,堆..),然后我使用或不使用优化标志( -O , -wmo )进行编译,并使用标志(-driver-time-compilation)检查时间

⬇️ result1 - 不使用优化标志 在此处输入图像描述

⬇️ result2 - 使用优化标志。 在此处输入图像描述

但 result1 花费了 0.3544 壁时间。我认为墙上的时间真的很花时间。

结果 2 花费了 0.9037 壁时间。

我认为使用优化标志应该比不使用更快。

你能帮我理解这是为什么吗?
我只想使用 swiftc 来减少编译时间。

0 投票
0 回答
62 浏览

ios - 太多的默认参数会减慢构建时间吗?

给定以下初始化程序:

通过一些简单的数学计算,所有可能的初始化器都是2^16 = 65536

问题:

添加太多默认参数是否会增加构建时间或性能不佳?