将NSArray的内容添加到Swift数组中

5
我在我的应用程序中同时使用Swift和Objective-C。 我有一个CustomClass,我想为这个类创建一个Swift数组,并从我的Objective-C类oldClass添加内容到这个数组中。oldClass中有一个包含这些对象的数组NSArray,称为arrayOfCustomClass。
var newArray = [CustomClass]()
newArray += oldClass.arrayOfCustomClass

这会导致一个错误:

'[(CustomClass)]' is not identical to 'CGFloat'

需要帮忙吗? 谢谢 Reza


1
展示其余的实际代码!什么是 oldClass?什么是 arrayOfCustomClass - matt
3个回答

0
问题在于Swift不知道NSArray中有什么。您必须将NSArray显式转换为[CustomClass](最好不要撒谎,否则运行时会崩溃)。

但是可能还存在其他问题,直到您揭示arrayOfCustomClass的真实内容才能知道。 - matt
正如我下面的答案所示,我需要先将其转换为 AnyObject,然后才能将其转换为 CustomClass。 - reza23
这可以通过可选转换安全地完成 - 请参见我的答案。 - Nate Cook
1
@reza23,我之前要求你展示Objective-C代码,但你仍未如实展示,导致你错误地需要将其转换为AnyObject。这里有些问题需要你解决,但你拒绝展示它是什么。 - matt

0

看起来有效的是:

newArray += oldClass.arrayOfCustomClass as AnyObject as [CustomClass]

0

为了安全起见,您只需要尝试进行可选转换。如果您认为NSArray仅包含CustomClass类型的元素,则可以执行以下操作:

var newArray = [CustomClass]()
if let customArray = oldClass.arrayOfCustomClass as? [CustomClass] {
    newArray += customArray
}

如果你想提取CustomClass元素(我知道这与你所要求的有点不同),可以按照以下方式进行:
var newArray = [CustomClass]()
for element: AnyObject in oldClass.arrayOfCustomClass {
    if let custom = element as? CustomClass {
        newArray.append(custom)
    }
}

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