【发布时间】:2021-12-24 17:56:22
【问题描述】:
我有以下问题: 我有快速实现的 ObjC 协议:
// ObjC protocol
@protocol PhonebookSomeEventCallback
- (void)onEvent:(nonnull NSUUID *)outUserId
someNumValue:(int32_t)someNumValue
lotOfPersons:(nonnull NSArray<PhonebookPerson *> *)lotOfPersons;
@end
//=====================================
// Swift impl
class PhonebookSomeEventCallbackImpl: PhonebookSomeEventCallback
{
public func onEvent(_ outUserId: UUID,someNumValue: Int32,lotOfPersons: [PhonebookPerson])
{
}
}
构建失败并出现以下错误:
error: instance method 'onEvent(_:someNumValue:lotOfPersons:)' has different argument labels from those required by protocol 'PhonebookSomeEventCallback' ('onEvent(_:someNumValue:lotOf:)')
public func onEvent(_ outUserId: UUID,someNumValue: Int32,lotOfPersons: [PhonebookPerson])
^
lotOf
Phonebook.PhonebookSomeEventCallback:3:10: note: requirement 'onEvent(_:someNumValue:lotOf:)' declared here
func onEvent(_ outUserId: UUID, someNumValue: Int32, lotOf lotOfPersons: [PhonebookPerson])
^
/Users/g.a.igumnov/work/mobile/phonebook/controller/mobile-app/x86_64/subprojects/controller/service-sbis-phonebook/phonebook/djinni/swift/phonebook/PhonebookSomeEventEvent.swift:32:17: error: 'onEvent(_:someNumValue:lotOfPersons:)' has been renamed to 'onEvent(_:someNumValue:lotOf:)'
public func onEvent(_ outUserId: UUID,someNumValue: Int32,lotOfPersons: [PhonebookPerson])
^
lotOf
Phonebook.PhonebookSomeEventCallback:5:10: note: 'onEvent(_:someNumValue:lotOfPersons:)' was obsoleted in Swift 3
func onEvent(_ outUserId: UUID, someNumValue: Int32, lotOfPersons: [PhonebookPerson])
通过实验,我发现了以下原则 如果参数名称以关键字之一结尾('of'、'with'、'by'、'from'、'on' - 我找到的那些)后跟类型名称(或其中的一部分,我有类 PhonebookPerson,但只有 Person 有效)数组的复数形式和非数组的单数形式,类型名称从参数名称中删除。
我有两个问题
- 是否有任何关于这种黑魔法的文档?
- 除了不写此类名称之外,还有什么正确的方法可以避免这种情况?
【问题讨论】:
-
也许stackoverflow.com/questions/40157131/… 你可能有一些链接和阅读使用
NS_SWIFT_NAMEdeveloper.apple.com/documentation/swift/… 你可能会强制重命名我认为的方法。 -
主要问题是这段代码是自动生成的c++swift bridge,基于伪代码。而且我需要了解重命名工作的规则,以便能够生成正确的代码(或者至少向用户显示正确的错误,为什么他们不能这样命名他们的参数)。
-
在链接的问题上,有一个链接“SE-0005 Better Translation of Objective-C APIs Into Swift”应该添加详细信息...
标签: ios swift objective-c