我正在将iOS项目迁移到Swift。我正在上课。当我从Swift调用Objective C方法时,很多Objective
C类型都转换为它们的Swift对应类型。
在我的情况下,目标C
NSMutableArray
转换为Swift的Array<AnyObject>
。现在是我的问题了。在我的Swift类中,我从Objective
C对象获得了这样的数组。现在我处于Swift世界中,我想将此数组强制转换为特定类型,而不是AnyObject
,因为我确定知道此数组中存在哪种对象。
编译器不允许我这样做!让我通过说要转换为包含字符串的数组来简化我的问题。这是我尝试的:
var strings = myObjcObject.getStrings() as [String]
我从编译器收到以下错误:
“字符串”与“ AnyObject”不同
我必须同意编译器,因为String确实与AnyObject不同。但是我不明白为什么这是一个问题。如果需要,我可以将AnyObject转换为String,对吗?
我也尝试过:
var strings = myObjcObject.getStrings() as? [String]
这似乎是朝正确方向迈出的一步,但是getStrings()返回,NSMutableArray
因此出现以下错误:
“ NSArray”不是“ NSMutableArray”的子类型
有什么办法可以做我想在这里做的事情吗?
您可以先进行两次向下转换NSArray
,然后再进行到[String]
:
var strings = myObjcObject.getStrings() as NSArray as [String]
在操场上进行了以下测试:
import Foundation
var objCMutableArray = NSMutableArray(array: ["a", "b", "c"])
var swiftArray = objCMutableArray as NSArray as [String]
更新:
在更高版本的Swift(至少1.2版)中,编译器会抱怨as [String]
。相反,您应该使用if let
带有条件下调的as?
:
import Foundation
var objCMutableArray = NSMutableArray(array: ["a", "b", "c"])
if let swiftArray = objCMutableArray as NSArray as? [String] {
// Use swiftArray here
}
如果您 _ 绝对_
确定NSMutableArray
可以将其强制转换为[String]
,则可以as!
改用(但在大多数情况下您可能不应该使用):
import Foundation
var objCMutableArray = NSMutableArray(array: ["a", "b", "c"])
var swiftArray = objCMutableArray as NSArray as! [String]
问题内容: 嗨,我有一个NSMutableArray,我尝试这样做: 如何将Int64变量添加到NSMutableArray()? 问题答案: 您正在使用基础数组(NSMutableArray),因此应使用基础编号对象: 您还可以使用本机swift数组:
我正在尝试有一个通量通用转换器使用通用类型在Java 8。我把我的代码建立在这个答案的基础上。其思想基本上是实现这个特定的转换器->: 类型转换器->转换为我想要的任何类型。因此,我正在使用构造函数创建一个类型为的类,并返回一个方法。我想在调用上创建类似这样的多个条目:,但类类型不同。但它甚至对整数也不起作用。 当我使用此单元测试进行测试时,我得到错误:。
问题内容: 我得到这个错误,但我试图让一个从。这是我的代码: 在我的 Firebase数据库中, “名称” 和 “登录” 都是字符串。我不明白是什么问题。 任何帮助将不胜感激! 问题答案: 问题涉及快照投向NSDictionary。由于快照值是一个字符串。试试这个:
问题内容: 我有来自网站的JSON数据。我制作了主词典,并且可以解析除一个子词典之外的所有数据。我收到错误消息:“迅速:无法将类型’__NSCFArray’的值强制转换为’NSDictionary’” 我的数据的这个例子。我无法解析 “天气”, 但可以解析所有其他字典,例如。 程式码片段 问题答案: 代表您的评论…我会说windDictionary是Dictionary … 所以,您的天气部分是字
问题内容: 我正在从Firebase数据库(JSON db)中检索一个数字值,然后将此数字显示为,尽管尝试显示该错误时会遇到此错误。 无法将值类型’__NSCFNumber’强制转换为’NSString’ 考虑到在我检索到的值在字符串和数字之间可能会发生变化,我如何正确地将检索到的值转换为字符串。 这是我的代码: 问题答案: 错误是说您的数量是,您不能直接将数字转换为,尝试这样。 要么 或使用单i
问题内容: 我有以下两节课: 和: 当我运行测试时,一切都是笨拙的。如果我将类型参数化更改为: 编译器抱怨,报告: 错误:类型不兼容的整数不能转换为T number = new Integer(11); 其中T是类型变量T扩展了在方法getSomeValue(boolean)中声明的Object 它同样对Double有所抱怨。为什么? 编辑:我犯了一个错误。这实际上是有效的代码。 现在我明白了@S