Ios 将可选的@objc枚举类型传递到@objc协议
我试图在@objc协议中创建一个可选函数,文档类型也是@objc enum。但我得到了一个错误: 方法无法标记为@objc,因为参数的类型无法更改 用Objective-C表示 我的源代码:Ios 将可选的@objc枚举类型传递到@objc协议,ios,swift,protocols,Ios,Swift,Protocols,我试图在@objc协议中创建一个可选函数,文档类型也是@objc enum。但我得到了一个错误: 方法无法标记为@objc,因为参数的类型无法更改 用Objective-C表示 我的源代码: @objc enum DocumentType: Int { case pdf case png } @objc protocol ImageDocumentEditorProtocol: class { @objc optional func imageDocumentEdito
@objc enum DocumentType: Int {
case pdf
case png
}
@objc protocol ImageDocumentEditorProtocol: class {
@objc optional func imageDocumentEditorDidCancel(documentType: DocumentType?)
}
我如何解决这个问题?
谢谢问题是
?
在Objective-C中,不能表示可选的基元类型
将其设置为非可选,或找到其他方法。问题在于
?
在Objective-C中,不能表示可选的基元类型
将其设置为非可选,或找到另一种方法。只需删除DocumentType上的可选项,即可实现以下功能:
@objc可选func imagedocumenteditorddcancel(documentType:documentType)
如果您想在此处使用表示nil值的内容,可以在枚举中为其添加另一个大小写,如下所示:
@objc enum DocumentType: Int {
case pdf
case png
case none
}
只需删除DocumentType上的可选项,即可实现以下功能:
@objc可选func imagedocumenteditorddcancel(documentType:documentType)
如果您想在此处使用表示nil值的内容,可以在枚举中为其添加另一个大小写,如下所示:
@objc enum DocumentType: Int {
case pdf
case png
case none
}
Objective-C没有可选枚举。枚举必须是非可选的。类可以是可选的,而不是枚举:( 一种解决方法是添加案例:
@objc enum DocumentType: Int {
case pdf
case png
case none
}
并使用非可选类型DocumentType
当然,这使得非可选的DocumentType
s不可表示。要同时表示可选和非可选的DocumentType
s,您需要两种类型:
@objc enum DocumentType: Int {
case pdf
case png
func asOptionalDocumentType() -> OptionalDocumentType {
switch self {
case .pdf: return .pdf
case .png: return .png
}
}
}
extension Optional where Wrapped == DocumentType {
func asOptionalDocumentType() -> OptionalDocumentType {
self?.asOptionalDocumentType() ?? .none
}
}
@objc enum OptionalDocumentType: Int, ExpressibleByNilLiteral {
case pdf
case png
case none
func asDocumentType() -> DocumentType? {
switch self {
case .pdf: return .pdf
case .png: return .png
case .none: return nil
}
}
init(nilLiteral: ()) {
self = .none
}
}
我添加了转换方法,以便于在它们之间进行转换,但技术上并不需要这些方法。Objective-C没有可选的枚举。枚举必须是非可选的。类可以是可选的,而不是枚举:( 一种解决方法是添加案例:
@objc enum DocumentType: Int {
case pdf
case png
case none
}
并使用非可选类型DocumentType
当然,这使得非可选的DocumentType
s不可表示。要同时表示可选和非可选的DocumentType
s,您需要两种类型:
@objc enum DocumentType: Int {
case pdf
case png
func asOptionalDocumentType() -> OptionalDocumentType {
switch self {
case .pdf: return .pdf
case .png: return .png
}
}
}
extension Optional where Wrapped == DocumentType {
func asOptionalDocumentType() -> OptionalDocumentType {
self?.asOptionalDocumentType() ?? .none
}
}
@objc enum OptionalDocumentType: Int, ExpressibleByNilLiteral {
case pdf
case png
case none
func asDocumentType() -> DocumentType? {
switch self {
case .pdf: return .pdf
case .png: return .png
case .none: return nil
}
}
init(nilLiteral: ()) {
self = .none
}
}
我添加了转换方法,使它们之间的转换更容易,但技术上并不需要它们