Я пытаюсь создать общую функцию Swift, которая будет принимать две коллекции и скопировать часть одного в часть другого, вроде std::copy
с точки зрения семантики и memcpy
с точки зрения интерфейса , Однако я не могу придумать правильные аргументы аргументов/аргументов, чтобы заставить его работать.Общая функция копирования в Swift
Цель состоит в том, чтобы быть в состоянии назвать это так, возможно, опуская любой из трех последних параметров:
copy(&output, input, offsetA: 0, offsetB: 4, count: 20)
Это то, что я до сих пор:
func copy
<T: CollectionType, U: CollectionType where
T.Generator.Element == U.Generator.Element,
T.Index == Int, T.Index == U.Index,
T.Generator.Element: Equatable>
(inout a: T, b: U, offsetA: Int = 0, offsetB: Int = 0, count: Int? = nil) {
let max = count ?? b.endIndex - b.startIndex - offsetB
for i in 0..<max {
let indA = offsetA + i
let indB = offsetB + i
a[indA] = b[indB]
}
}
Однако я имеют эту ошибку на линии a[indA] = b[indB]
:
Не удалось найти перегрузку для «индекса», которая принимает прилагаемый аргумент s
Это несколько удивительно, поскольку почти идентичные общие ограничения позволяют мне сравнивать элементы, что означает, что тип должен быть правильным, по крайней мере.
Что мне не хватает? В противном случае, есть ли функция, чтобы сделать это в другом месте?
Я не перед моим компьютером, но сегодня я попробую его попробовать. – zneak
Общие требования в основном были скопированы из функции сравнения, которую я сделал, поэтому нет, элементы, вероятно, не должны быть равнозначными. – zneak