You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 4中PKPaymentButton的init(type:style)不可用问题求助

解答你的PKPaymentButton初始化问题

Hey there! Let me break down what's happening here and answer your questions clearly:

这是不是Swift的Bug?

绝对不是——这个问题其实是Swift 4引入的Objective-C API命名规范优化(来自SE-0005提案)导致的预期行为,而非语言bug。

在Swift 3.2及更早版本中,Objective-C的-initWithType:style:方法会被映射成PKPaymentButton(type:style:)。但Swift 4为了让Objective-C API更贴合Swift的命名习惯,将这个初始化方法重命名为PKPaymentButton(paymentButtonType:paymentButtonStyle:)。原来的init(type:style:)在Swift 4环境下就会被标记为不可用,这是编译器遵循新命名规则的正常表现。

你切换到Swift 3.2能编译成功,只是因为Swift 3.2还保留着旧的API映射逻辑,并没有采用Swift 4的新命名规范。

有没有人提交过相关Bug报告?

因为这是Apple明确的API命名调整,而非意外问题,所以这个情况不会被归类为bug,自然也不会有针对这个现象的有效bug报告。实际上,很多开发者在Swift 4刚推出时都遇到过类似的Objective-C API命名适配问题,相关讨论在开发者社区里很常见,大家的解决方案都是改用Swift 4对应的新方法名,而非提交bug。

快速解决方法(不用切换Swift版本)

如果你想留在Swift 4环境下解决这个问题,只需要把初始化代码改成新的命名格式即可:

// Swift 4及以后的正确写法
let paymentButton = PKPaymentButton(paymentButtonType: .plain, paymentButtonStyle: .black)

这样就能正常编译,不用再切换到Swift 3.2啦。

内容的提问来源于stack exchange,提问作者YogiAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:41:45