2016-10-05 5 views
-2

Я пытаюсь преобразовать проект Swift 3. Однако я застрял преобразование объявления массива:Массивов в Swift 3

Невозможно преобразовать значение типа [Task <>] для указанного типа [Задача]

var tasks: [Task] = [] as! [Task] 

Задача объявляется как так в Objective-C (часть библиотеки):

@class Task; 

@interface Task<__covariant ResultType> : NSObject 

Я не уверен, что происходит?

+0

Пожалуйста, покажите, что такое '' Задача'. – OOPer

+0

привет @OOPer Я добавил эту информацию - спасибо. – Marin

+0

В строке декларирования объявленный не необязательный тип, литый, принудительно развернутый к тому же типу, довольно глупый, без обид. – vadian

ответ

1

Я полагаю, сначала вы пытались написать

var tasks: [Task] = [] 

и компилятор сказал вам:

cannot convert value of type '[Any]' to specified type '[Task]' 
var tasks: [Task] = [] 
        ^~ 
         as! [Task] 

Что происходит на самом деле является то, что компилятор пытается вывести общий параметр общий тип Task, и неисправность. У вас не может быть массив неуказанных Task экземпляров.

Вы должны либо сделать массив конкретных Task экземпляров:

var tasks: [Task<ConcreteResultType>] = [] 

или вы должны сделать общий массив задач

var tasks: [Task<T>] = [] 

где T объявлена ​​в охватывающей области.

+0

Спасибо, Александр, Печально, что Swift 3 требует разбивки компонентов таким образом, но я считаю, что ваш ответ отвечает в соответствии с ответом OOPer. ​​ – Marin

+0

Что вы ожидали от Swift? – Alexander

+0

Библиотека, использующая ее в Objective-C. Не было проблем с ее использованием в Swift 2.2, но Swift 3 сделал вещи немного сложнее – Marin

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