无法将类型...的值转换为类型

问题描述:

我正面临着将我的元组作为NSArray的错误。无法将类型...的值转换为类型

我的代码如下所示。

var Name: [String] = [] 
var Requested: [String] = [] 
var Time: [String] = [] 
var Status: [String] = [] 

var filtered: [(process:String, requestor:String, creation:String, status:String)] = [] 
var allItems: [(process:String, requestor:String, creation:String, status:String)] = [] 

for i in 0...Name.count{ 
     if(Name[safe: i] != nil && Requested[safe: i] != nil && Time[safe: i] != nil && Status[safe: i] != nil) 
     { 
     allItems += [(process:Name[i], requestor:Requested[i], creation:Time[i], status:Status[i])] 
     } 
    } 
    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!) 
    let array = (allItems as NSArray).filteredArrayUsingPredicate(searchPredicate) 

我想在这种情况下使用filteredArrayUsingPredicate。但我面对

无法将类型的价值 '[(过程:字符串,请求:字符串,创作:字符串,状态:字符串)]' 在强制输入 '的NSArray'

灿有人告诉我为什么我面临这个错误?

谁能告诉我为什么我面临着这样的错误?

当然。 NSArray是一个Objective-C类。唯一可以成为NSArray元素的对象是Objective-C对象。 Objective-C中没有这样的元组;一个元组是一个Swift对象。 Swift对象的数组不能转换为NSArray。

+0

感谢您的回答。有什么我可以使用,而不是NSArray? –

+0

如果您坚持要求'filteredArrayUsingPredicate',则不是。这是一个NSArray方法。 – matt

+0

但是,您并没有要求其他方法或其他方法来做您正在尝试做的事情。你甚至没有解释你想做什么。你的问题是为什么你会得到这个编译器错误,并且我正确地告诉过你,为什么会这样。 – matt