gpt4 book ai didi

ios - Swift 3 创建一个 NSNumber 对象

转载 作者:搜寻专家 更新时间:2023-11-01 07:14:55 24 4
gpt4 key购买 nike

我正在尝试创建一个 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)

枚举不会自动转换为整数。假设 EnumInt 值支持(并非所有枚举都如此)。比你可以使用:

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
}
}

关于ios - Swift 3 创建一个 NSNumber 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42690825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com