Swift 3 创建一个 NSNumber 对象
Swift 3 Creating an NSNumber Object
我正在尝试创建一个 NSNumber 对象。
我在 objc 中有这个代码:
@property (nonatomic, assign) Enum someEnum;
static NSString *const value_type = @"type";
- (id)initWithDictionary:(NSDictionary *)dict andUID:(int)uid {
self.someEnum = [[dict objectForKey:value_type] integerValue];
}
- (NSDictionary *)serializeToDictionary {
dict[value_type] = [NSNumber numberWithInteger:self.someEnum];
}
此代码在 swift 3 中如何等效?
我发现在 swift NSNumber 中有 init(value: ) 符号,但它只是初始化一个对象,而不是创建和初始化。 init(value: ) 抛出一个错误,建议将 "value" 更改为 "coder"。
我的 Swift 代码:
var someEnum = Enum.self
let value_type: NSString = "type"
init(dictionary dict: NSDictionary, andUID uid: Int) {
self.someEnum = dict.object(forKey: value_type) as! Enum.Type
}
func serializeToDictionary() -> NSDictionary {
dict[value_type] = NSNumber.init(value: self.someEnum)
}
Objective-C头文件:
typedef enum {
EnumDefault = 0,
EnumSecond = 1
} Enum;
static NSString *const value_type = @"type";
@property (nonatomic, assign) Enum someEnum;
Objective C 实现文件:
- (id)initWithDictionary:(NSDictionary *)dict andUID:(int)uid {
if(self = [super init]) {
self.someEnum = [[dict objectForKey:value_type] integerValue];
}
return self
}
- (NSDictionary *)serializeToDictionary {
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[value_type] = [NSNumber numberWithInteger:self.someEnum];
return dict;
}
var someEnum = Enum.self
someEnum
的值是一个类型,不是一个特定的值。这是你的第一个错误。
你可能想要类似的东西
var someEnum: Enum = ... // (your default value)
现在
dict[value_type] = NSNumber.init(value: self.someEnum)
枚举不会自动转换为整数。假设 Enum
由 Int
值支持(并非所有枚举都如此)。比你可以使用:
dict[value_type] = NSNumber(value: self.someEnum.rawValue)
或者只是
dict[value_type] = self.someEnum.rawValue as NSNumber
完整代码(在Swift中使用NS(Mutable)Dictionary
不是一个好主意,我使用!
解决的异常状态应该更好地解决)。
enum Enum : Int {
case `default` = 0
case second = 1
}
class Test {
var someEnum: Enum = .default
let valueType: String = "type"
init(dictionary: NSDictionary, andUID uid: Int) {
self.someEnum = Enum(rawValue: (dictionary[valueType] as! NSNumber).intValue) ?? .default
}
func serializeToDictionary() -> NSDictionary {
let dictionary = NSMutableDictionary()
dictionary[valueType] = self.someEnum.rawValue as NSNumber
return dictionary
}
}
我正在尝试创建一个 NSNumber 对象。 我在 objc 中有这个代码:
@property (nonatomic, assign) Enum someEnum;
static NSString *const value_type = @"type";
- (id)initWithDictionary:(NSDictionary *)dict andUID:(int)uid {
self.someEnum = [[dict objectForKey:value_type] integerValue];
}
- (NSDictionary *)serializeToDictionary {
dict[value_type] = [NSNumber numberWithInteger:self.someEnum];
}
此代码在 swift 3 中如何等效? 我发现在 swift NSNumber 中有 init(value: ) 符号,但它只是初始化一个对象,而不是创建和初始化。 init(value: ) 抛出一个错误,建议将 "value" 更改为 "coder"。 我的 Swift 代码:
var someEnum = Enum.self
let value_type: NSString = "type"
init(dictionary dict: NSDictionary, andUID uid: Int) {
self.someEnum = dict.object(forKey: value_type) as! Enum.Type
}
func serializeToDictionary() -> NSDictionary {
dict[value_type] = NSNumber.init(value: self.someEnum)
}
Objective-C头文件:
typedef enum {
EnumDefault = 0,
EnumSecond = 1
} Enum;
static NSString *const value_type = @"type";
@property (nonatomic, assign) Enum someEnum;
Objective C 实现文件:
- (id)initWithDictionary:(NSDictionary *)dict andUID:(int)uid {
if(self = [super init]) {
self.someEnum = [[dict objectForKey:value_type] integerValue];
}
return self
}
- (NSDictionary *)serializeToDictionary {
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[value_type] = [NSNumber numberWithInteger:self.someEnum];
return dict;
}
var someEnum = Enum.self
someEnum
的值是一个类型,不是一个特定的值。这是你的第一个错误。
你可能想要类似的东西
var someEnum: Enum = ... // (your default value)
现在
dict[value_type] = NSNumber.init(value: self.someEnum)
枚举不会自动转换为整数。假设 Enum
由 Int
值支持(并非所有枚举都如此)。比你可以使用:
dict[value_type] = NSNumber(value: self.someEnum.rawValue)
或者只是
dict[value_type] = self.someEnum.rawValue as NSNumber
完整代码(在Swift中使用NS(Mutable)Dictionary
不是一个好主意,我使用!
解决的异常状态应该更好地解决)。
enum Enum : Int {
case `default` = 0
case second = 1
}
class Test {
var someEnum: Enum = .default
let valueType: String = "type"
init(dictionary: NSDictionary, andUID uid: Int) {
self.someEnum = Enum(rawValue: (dictionary[valueType] as! NSNumber).intValue) ?? .default
}
func serializeToDictionary() -> NSDictionary {
let dictionary = NSMutableDictionary()
dictionary[valueType] = self.someEnum.rawValue as NSNumber
return dictionary
}
}