如何在Swift中将Any转换为Int?

air*_*aft 12 string ios swift

在提出这个问题之前,我已经搜索了Stackoverflow的相关问题,并找到了类似的问题:如何在Swift中将Any转换为Int.

我的要求不是那么少:

let tResult = result as? [String:AnyObject]
let stateCode = tResult?["result"] as? Int
Run Code Online (Sandbox Code Playgroud)

我的需要是,如果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;
}
Run Code Online (Sandbox Code Playgroud)

是否可以class method使用Swift3 编写类似的内容?

And*_*eev 6

不那么冗长的答案:

let key = "result"
let stateCode = tResult?[key] as? Int ?? Int(tResult?[key] as? String ?? "")
Run Code Online (Sandbox Code Playgroud)

结果:

let tResult: [String: Any]? = ["result": 123] // stateCode: 123
let tResult: [String: Any]? = ["result": "123"] // stateCode: 123
let tResult: [String: Any]? = ["result": "abc"] // stateCode: nil
Run Code Online (Sandbox Code Playgroud)