Я пытался создать пользовательский итератор, который возвращает обертку abcContainer
над сырым классом данных abc
Swift 3 - Последовательность неоднозначной без больше контекста
// raw data class
class abc {
var name : String = "";
init(_ value : String) {
name = value;
}
}
// with container, only "name" is to be visible
class abcContainer {
private var _abc : abc;
init(_ obj : abc) {
_abc = obj;
}
// + extra methods here
func getName() -> String {
return _abc.name
}
}
Делом было в том, что словарь будет возвращать экземпляры из abcContainer
вместо просто простой товар abc
класс.
Я хотел бы использовать протокол последовательности, чтобы сделать преобразование автоматически, но я не был в состоянии преобразования [String:abc]
в [String:abcContainer]
автоматически, как это:
// the iterator is implemented just iterating the inner basic dict
// but wrapping the result value as abcContainer
class abcIterator : Sequence, IteratorProtocol {
private var __source : [String:abc]?;
var index = 0
var myIterator : DictionaryIterator<String, abc>;
init(_ ctxArray: [String:abc]) {
self.__source = ctxArray
index = 0;
myIterator = (__source?.makeIterator())!
}
func next() -> abcContainer? {
let nextItem = myIterator.next();
if(nextItem != nil) {
return abcContainer((nextItem?.value)!);
}
return nil;
}
}
// this was supposed to be the wrapper over the collection
class abcCollection : Sequence {
private var __source : [String:abc]?;
init(_ list: [String:abc]) {
self.__source = list
}
func makeIterator() -> abcIterator {
return abcIterator(self.__source!);
}
}
Я, вероятно, отсутствует что-то очень простой здесь. Когда я пытаюсь использовать коллекцию так:
var dict : [String:abc] = [String:abc]();
dict["abba"] = abc("John Smith");
for (key,value) in abcCollection(dict) {
print(key, value.getName());
}
Я получаю сообщение об ошибке: Expression типа «abcCollection» неоднозначно без больше контекста
Кто-нибудь есть идеи, как сделать его работу? Чего не хватает? У меня есть ощущение, что этот ответ имеет информацию, мне нужно ...
Swift 2 to 3 Migration for Swift Sequence Protocol
Спасибо! Хорошие тонкие точки. –