如何在Swift中将AnyObject类型转换为Int

9

我正在一个Dictionarys数组中搜索一个键,希望将结果值转换为一个Int值。这是我的尝试。

if let result = lasrIDArray.flatMap( {$0["\(self.selectedTitle)"]} ).first {      
    print(result)

    if let number = result as? NSNumber {
        let tag = number.integerValue
        let currentScroll = view.viewWithTag(Int(api.selectedCatID)!) as! UIScrollView
        let lastImgVw = currentScroll.viewWithTag(tag) as! UIImageView
        print(lastImgVw.frame.origin.y)
    }
}

但是如果 if let number = result as? NSNumber 没有按预期工作,那么正确的转换方式是什么?


请检查一下,你得到的是String还是Int作为响应? - Nirav D
变量 num = Int(result) 如果 num != nil { println("有效整数") } 否则 { println("无效整数") } - Subin K Kuriakose
步骤1:清晰地格式化您的代码。 - meaning-matters
@SubinKKuriakose无法使用类型为(AnyObject)的参数列表调用Int类型的初始化程序,因此变量num = Int(result)。 - Irrd
3个回答

18

我不知道你的代码是什么,但下面的内容可能对你有帮助。

你可以用以下方法获取你的 AnyObject 值...

let data :AnyObject = "100"
let score = Int(data as! String)! //Force Unwrap optional value it will be dengerious for nil condition.
print(score)

或者也可以尝试这种方式

let hitCount = "100"
let data :AnyObject = hitCount as AnyObject //sometime Xcode will ask value type
let score = Int(data as? String ?? "") ?? 0
print(score)

输出 -

结果


Swift 3.1和Swift 4

let hitCount = "100"
let data :Any = hitCount //Any type Value passing here 
let score = Int(data as? String ?? "") ?? 0
print(score)

输出 -

在此输入图像描述


1
那么将可选值转换为非可选值的最佳方法是什么?告诉我,@dfri? - Anand Nimje
2
阅读这个优秀的规范答案。引用:“通常情况下,你不应该使用!操作符强制解包可选项”。 - dfrib
1
@dfri 在你的 或者也可以尝试这种方式 中:如果 data:Anyobject 的值是 "abc",能使用你的方法吗? - aircraft
@航空器 对不起,我没明白你的意思。你说的“在_你的_或者也可以试试这个方式”是什么意思?请注意,我链接的帖子是关于可选类型的一个(很好的)通用解答,但并非我所写。 - dfrib
需要进行很多转换才能得到所需的结果。这为什么这么麻烦啊,Swift!! - Dearwolves

1
如果您的数据是从JSON字符串解码而来,它将会被解码为NSNumber或NSString。
您可以使用以下函数:
func intValueForKey(key: String, inDictionary dictionary: [String: AnyObject]) throws -> Int {
    if let value = dictionary[key]?.integerValue {
        return value
    } else {
        throw NSError(domain: "Invalid key", code: -1, userInfo: nil)
    }
}

0

这里我提供了将AnyObject转换为Int和String的示例

var idInt : Int = 0
if let ids: AnyObject = responseDict["id"] {
    if let idsInt = ids as? Int{
        idInt  = idsInt
        print(idInt)
    }
}


var nameString : String = ""
    if let name: AnyObject = responseDict["name"] {
        if let nameStr = name as? String{
            nameString  = nameStr
            print(nameString)
        }
    }

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