2016-11-10 3 views
12

이 질문을하기 전에 Stackoverflow의 관련 질문을 검색 한 후 유사한 질문을 발견했습니다 : How to convert Any to Int in Swift. tResult?["result"]String 클래스 인 경우Any를 Int로 변환하는 방법?

let tResult = result as? [String:AnyObject] 
let stateCode = tResult?["result"] as? Int 

내 필요가있다, 나는 그것이 오히려 nil보다는, 너무 Int로 변환 할 것을 권장합니다

내 요구 사항은 적은 것이 아니다. 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

관련 문제