2016-11-10 52 views
12

在問這個問題之前,我搜索了Stackoverflow的相關問題,並找到了類似的問題:How to convert Any to Int in Swift如何在Swift中將Any轉換爲Int?

我的要求是不是少:

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

更簡潔的回答:

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

不知道編譯器是否會快速編譯該行 –

+0

@ LucaD'Alberti確實,我沒有測試性能。我希望編譯器足夠聰明,足以快速編譯該行:) –

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

像這樣的東西應該工作

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 
} 
3
if 
    let tResult = result as? [String:AnyObject], 
    let stateCodeString = tResult["result"] as? String, 
    let stateCode = Int(stateCodeString) 
{ 
    // do something with your stateCode 
} 

而且你不需要任何自己class methods

+0

這普林西對我的作品從plist中的任何讀的NSNumber並轉換爲字符串,毗鄰INT。謝謝。 – OrdoDei