如何在Swift中将任意类型转换为整数?

13
在提出这个问题之前,我已经搜索了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;
}

是否可能使用Swift3编写类似的class method

4个回答

8

简洁回答:

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

1
不确定编译器是否能快速编译那行代码。 - Luca D'Alberti
@LucaD'Alberti,实际上我没有测试过性能。我希望编译器足够聪明,可以快速编译这一行 :) - Andrey Gordeev

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
}

这样的内容应该可以运行


3
if 
    let tResult = result as? [String:AnyObject],
    let stateCodeString = tResult["result"] as? String,
    let stateCode = Int(stateCodeString)
{
    // do something with your stateCode
}

而且你不需要任何自己的类方法


这个原则对我来说很有效,可以将 plist 中的 NSNumber 作为 Any 类型读取并转换为字符串,然后再转换为 Int。谢谢。 - OrdoDei

2

试一下

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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接