Как конвертировать Any в Int в swift?
Прежде чем задавать этот вопрос, я искал связанные с Stackoverflow вопросы и нашел аналогичный: Как преобразовать Any в Int в Swift.
Мое требование не меньше:
let tResult = result as? [String:AnyObject]
let stateCode = tResult?["result"] as? Int
Мне нужно, чтобы tResult?["result"]
был классом String
, я также хочу, чтобы он был преобразован в Int
, а не в nil
.
В objective-c
я написал class method
, чтобы получить преобразованный Int
:
+ (NSInteger)getIntegerFromIdValue:(id)value
{
NSString *strValue;
NSInteger ret = 0;
if(value != nil){
strValue = [NSString stringWithFormat:@"%@", value];
if(![strValue isEqualToString:@""] && ![strValue isEqualToString:@"null"]){
ret = [strValue intValue];
}
}
return ret;
}
Можно ли написать аналогичный class method
с помощью Swift3?
Ответы
Ответ 1
Менее подробный ответ:
let key = "result"
let stateCode = tResult?[key] as? Int ?? Int(tResult?[key] as? String ?? "")
Результаты:
let tResult: [String: Any]? = ["result": 123] // stateCode: 123
let tResult: [String: Any]? = ["result": "123"] // stateCode: 123
let tResult: [String: Any]? = ["result": "abc"] // stateCode: nil
Ответ 2
if
let tResult = result as? [String:AnyObject],
let stateCodeString = tResult["result"] as? String,
let stateCode = Int(stateCodeString)
{
// do something with your stateCode
}
И вам не нужен собственный class methods
.
Ответ 3
if let stateCode = tResult["result"] as? String {
if let stateCodeInt = Int(stateCode){
// stateCodeInt is Int
}
}else if let stateCodeInt = tResult["result"] as? Int {
// stateCodeInt is Int
}
Что-то вроде этого должно работать
Ответ 4
Попробуйте это
class func getIntegerFromIdValue(_ value: Any) -> Int {
var strValue: String
var ret = 0
if value != nil {
strValue = "\(value)"
if !(strValue == "") && !(strValue == "null") {
ret = Int((strValue as NSString ?? "0").intValue)
}
}
return ret
}