我必须将以下几行 Objective-c 代码翻译成 swift。这是来自 Objective-c JSONModel-Framework 的示例其中,框架提供的 Optional
协议(protocol)应用于 NSString
类型的实例变量。我找到了一个 related post但我没有设法实现它。在我的 MYModel.swift
实现中,Xcode 提示 Cannot specialize non-generic type NSString
谢谢你的帮助!
MYModel.swift
@objc(MYModel) public class MYModel : JSONModel {
...
public var name : NSString<Optional>
...
}
MYModel.h
@interface MYModel : JSONModel
...
@property (strong, nonatomic) NSString<Optional>* name;
...
...
/**
* Protocol for defining optional properties in a JSON Model class. Use like below to define
* model properties that are not required to have values in the JSON input:
*
* @property (strong, nonatomic) NSString<Optional>* propertyName;
*
*/
@protocol Optional
@end
...
最佳答案
<
和 >
不是为了符合协议(protocol)。它适用于具有泛型的类型,例如数组:
Array<T>
所以你可以写var a: Array<String>
.
你想要别的东西,一个变量应该是一个类型 String
和遵守协议(protocol)
您可以使用协议(protocol)扩展 String 并自行添加所需的功能。
由于您的 Optional
协议(protocol)是空的,这样写就足够了:
extension NSString: Optional {} // you can use String if you like
要创建协议(protocol),请在 Swift 中编写:
protocol Optional {}
您也可以使用 Objective-C 创建协议(protocol)。
你不应该使用 Optional,因为已经有一个,但是因为 Swift 有命名空间,所以它可以工作。 你当然可以这样写:
extension NSString: JsonOptProtocol {}
protocol JsonOptProtocol {} // or create that in Objective-C like you did
关于ios - 带有协议(protocol)的 Swift 实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25506758/