5

我必须将以下几行 Objective-c 代码翻译成 swift。这是来自 Objective-c JSONModel-Framework的示例,其中框架Optional提供的协议应用于类型为 的实例变量NSString。我找到了一个相关的帖子,但我没有设法实现它。随着我的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; 
...

JSON模型.h

...
/**
 * 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
...
4

2 回答 2

1

<>符合协议。它适用于具有泛型的类型,例如 Array:

Array<T>

所以你可以写var a: Array<String>

你想要别的东西,一个变量应该是一个类型String 并且符合协议


您可以使用协议扩展 String 并自己添加所需的功能。

由于您的Optional协议是空的,因此编写以下内容就足够了:

extension NSString: Optional {} // you can use String if you like

用 Swift 创建协议:

protocol Optional {}

您也可以使用 Objective-C 创建协议。


你不应该使用 Optional,因为已经有一个,但是因为 Swift 有命名空间,所以它可以工作。你当然可以写这样的东西:

extension NSString: JsonOptProtocol {}

protocol JsonOptProtocol {} // or create that in Objective-C like you did

文档链接。

于 2014-08-26T13:35:48.947 回答
0

Optional 是在 Swift 标准库中声明的类型,目前 JSONModel 与 Swift 不兼容,因此。

于 2014-08-26T13:59:19.840 回答