Ios 如何使用Swift参数定义Swift协议中的可选方法? TL;博士
如何在接受自定义类型参数的swift协议中定义可选方法 案件 我知道在swift协议中定义可选方法的方法是使用Ios 如何使用Swift参数定义Swift协议中的可选方法? TL;博士,ios,swift,protocols,Ios,Swift,Protocols,如何在接受自定义类型参数的swift协议中定义可选方法 案件 我知道在swift协议中定义可选方法的方法是使用@objc标志。像这样: @objc protocol someSweetProtocol { optional func doSomethingCool() } 但是当我想对参数使用我的自定义类型时,就像这样: @objc protocol someSweetProtocol { optional func doSomethingCool(Put the defaul
@objc
标志。像这样:
@objc protocol someSweetProtocol {
optional func doSomethingCool()
}
但是当我想对参数使用我的自定义类型时,就像这样:
@objc protocol someSweetProtocol {
optional func doSomethingCool(Put the default implementations in an extension, like so:
class HSCoolPerson {}
protocol SomeSweetProtocol {
func doSomethingCool()
}
extension SomeSweetProtocol {
func doSomethingCool(The problem is this:
class HSCoolPerson {
// ...
}
class HSCoolPerson : NSObject {
// ...
}
@objc协议{
可选func doSomethingCool(将默认实现放在扩展中,如下所示:
@objc protocol someSweetProtocol {
optional func doSomethingCool(Put the default implementations in an extension, like so:
class HSCoolPerson {}
protocol SomeSweetProtocol {
func doSomethingCool()
}
extension SomeSweetProtocol {
func doSomethingCool(The problem is this:
class HSCoolPerson {
// ...
}
class HSCoolPerson : NSObject {
// ...
}
类HSCoolPerson{}
协议,协议{
func doSomethingCool()
}
扩展协议{
func doSomethingCool(将默认实现放在扩展中,如下所示:
@objc protocol someSweetProtocol {
optional func doSomethingCool(Put the default implementations in an extension, like so:
class HSCoolPerson {}
protocol SomeSweetProtocol {
func doSomethingCool()
}
extension SomeSweetProtocol {
func doSomethingCool(The problem is this:
class HSCoolPerson {
// ...
}
class HSCoolPerson : NSObject {
// ...
}
类HSCoolPerson{}
协议,协议{
func doSomethingCool()
}
扩展协议{
func doSomethingCool(问题在于:
错误消息清楚地告诉您,该类型HSCoolPerson类对Objective-C是完全不可见的。协议可选方法是Objective-C语言的一个功能;Swift只是借用了它(这就是为什么您必须说@objc protocol
才能获得此功能)所以,任何时候你想要定义一个协议可选方法,你必须以Objective-C可以理解的方式来做,因为Objective-C将为你做这项工作
要将此类公开给Objective-C,只需从NSObject派生它:
问题已解决。问题在于:
错误消息清楚地告诉您,该类型HSCoolPerson类对Objective-C是完全不可见的。协议可选方法是Objective-C语言的一个功能;Swift只是借用了它(这就是为什么您必须说@objc protocol
才能获得此功能)所以,任何时候你想要定义一个协议可选方法,你必须以Objective-C可以理解的方式来做,因为Objective-C将为你做这项工作
要将此类公开给Objective-C,只需从NSObject派生它:
问题已解决。您可以像在协议中那样声明func
@objc optional func doSomethingCool(您可以像在协议中那样声明func
@objc optional func doSomethingCool(HSCoolPerson是如何定义的?它必须是NSObject的子类。只是更新了问题“没有什么特别的…”这就是问题所在!请看下面我的答案。我的答案中有一个错误,我更新了它。HSCoolPerson是如何定义的?它必须是NSObject的子类。只是更新了问题“没有什么特别的…”这正是问题所在!请看下面我的答案。我的答案中有一个错误,我更新了它。请看我的在线Swift书籍,其中列出了Objective-C所能看到和不能看到的Swift事物:“Swift只是借用了它,事实上。”-知道他们为什么没有将可选协议方法直接构建到Swift本身吗?也许有一个明显的原因我不知道。@TimVermeulen我只能猜测:我怀疑他们根本不想拥有这个功能,但为了兼容性,他们只需镜像Objective-C的功能,特别是因为如此多的Cocoa协议依赖于n此功能。因此,该情况与任何对象的情况类似,其真正存在的理由是Objective-Cid
要与之对应。我的印象是,有一种快速的方法可以做到这一点。不过,谢谢,效果很好,而且很干净。我想这就是您尝试制作两种不同语言时得到的结果也许我应该说“可可”,而不是说“Objul-C”,但它的意思是相同的。在不导入基础的游乐场(或UIKIT或任何其他自己的基础)中尝试说<代码> Objp协议p{} /代码>游乐场。请看我的在线Swift书籍,其中列出了Objective-C可以看到和不能看到的Swift内容:“Swift只是借用了它,就像它过去一样。”-知道他们为什么没有将可选协议方法直接构建到Swift本身吗?也许有一个明显的原因我不知道。@TimVermeulen我只能猜测:我怀疑他们根本不想拥有这个功能,但为了兼容性,他们只需镜像Objective-C的功能,特别是因为如此多的Cocoa协议依赖于n此功能。因此,该情况与任何对象的情况类似,其真正存在的理由是Objective-Cid
要与之对应。我的印象是,有一种快速的方法可以做到这一点。不过,谢谢,效果很好,而且很干净。我想这就是您尝试制作两种不同语言时得到的结果也许我应该说“可可”,而不是说“Objul-C”,但它的意思是相同的。在不导入基础的游乐场(或UIKIT或任何其他自己的基础)中尝试说<代码> Objp协议p{} /代码>游乐场。