2016-11-16 3 views
-1

Я столкнулся с ошибкой, чтобы поместить свой кортеж в 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) 

В этом случае я хотел использовать filterArrayUsingPredicate. Но я столкнулся

Невозможно преобразовать значение типа '[(процесс: String, запрашивающий: String, создание: String, статус: String)]' к типу 'NSArray' в принуждении

Может кто-нибудь скажет мне, почему я столкнулся с этой ошибкой?

ответ

1

Может ли кто-нибудь сказать мне, почему я столкнулся с этой ошибкой?

Конечно. NSArray - это класс Objective-C. Единственными объектами, которые могут быть элементами NSArray, являются объекты Objective-C. В Objective-C нет такой вещи, как кортеж; кортеж Swift объект. Массив объектов Swift нельзя преобразовать в NSArray.

+0

Спасибо за ответ. Есть ли что-нибудь, что я могу использовать вместо NSArray? –

+0

Нет, если вы настаиваете на вызове 'filterArrayUsingPredicate'. Это метод NSArray. – matt

+0

Однако вы не просили альтернатив или других способов сделать то, что вы пытаетесь сделать. Вы даже не объяснили, что вы пытаетесь сделать. Ваш вопрос в том, почему вы получаете эту ошибку компилятора, и я сказал вам, правильно, почему это так. – matt

Смежные вопросы