问题标签 [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.
swift - “-c”选项对 Swift 编译器 (swiftc) 有什么作用?
我注意到里面有“-c”选项swiftc
,这个选项有什么作用?
迅速... -c ....
有这方面的官方文件吗?man
我在网上或网上找不到它--help
:(
swift - 如何正确地将按键发送到 BG 应用程序,而 swift 脚本和编译的 swiftc 二进制文件之间没有区别
有一个swift
名为的小脚本skey.swift
,即使它们不处于活动状态(例如它们在后台),也会通过它们的PID
(进程 ID)将按键发送到进程中。
测试用例:
- 让我们说运行
TextEdit.app
和Notes.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的评论,我尝试了以下
它按预期工作。看来事件发送过程一定存在,否则他的所有事件都被丢弃。
swift - 为什么我会收到此警告以在符合默认实现的协议的类型上实现“hash(into:)”
下面的代码显示了警告:
枚举 PlaybackSpeed 应该具有默认实现的函数resetSettings()
& hash(into:)
,因此不应生成此警告。
我的理解是错误的还是编译器错误?
swift - Swift:ARC 如何处理匿名对象?
ARC 多年前出现以取代痛苦的 MRC,但由于 ARC 只是一种编译器技术,它的魔力发生在编译时。所以,基本上它的作用 - 在适当的地方自动插入retain
和release
调用。所以,现在我的问题来了 - ARC 如何处理以下示例
对象是用创建的ref count == 1
(据我所知,至少在旧的 MRC objcalloc
中new
,copy
在哪里调用retain
。如果我错了,请纠正我),所以编译器必须减少这些对象的引用计数才能释放它们?但是这是如何完成的,因为这些对象实际上没有引用,它们是匿名的!我假设编译器可能会做以下优化
我的意思是编译器将引用匿名对象,以便能够调用release
它。但是,我不确定这正是它的工作原理!那么,有人可以解释一下在这种情况下实际发生了什么吗?
亲切的问候,
安德烈
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
部分,这很奇怪。
ios - 只告诉 Swift 编译器方法为 swift
我有一个这样定义的快速类:
里面有很多方法可以用于objective-c,所以我@objcMembers
直接使用for类前缀,然后swift编译器开始抱怨这个:
方法 'concat' 与 Objective-C 选择器 'concat:' 与先前使用相同 Objective-C 选择器的声明冲突
它们具有完全相同的函数签名,但后者即使暴露也仅可用于 swift。现在我正在寻找一些编译标志来将后一种concat
方法标记为swift 只是为了告诉编译器忽略冲突错误。
@objc
并@objcMembers
明确地做到这一点,那么如何扭转呢?
ios - 太多的默认参数会减慢构建时间吗?
给定以下初始化程序:
通过一些简单的数学计算,所有可能的初始化器都是2^16 = 65536
问题:
添加太多默认参数是否会增加构建时间或性能不佳?