gpt4 book ai didi

swift - 无法从 Swift 中的协议(protocol)扩展调用通用初始值设定项

转载 作者:行者123 更新时间:2023-11-30 13:35:33 25 4
gpt4 key购买 nike

我正在尝试调用我从我也制作的协议(protocol)扩展方法制作的struct:

public struct AdjacentDifferenceArrayGenerator<T: Strideable where T.Stride == T>: GeneratorType {
private var array: [T]
public init<U: SequenceType where U.Generator.Element == T>(source: U) {
self.array = source.adjacentDifference()
}
public mutating func next() -> [T]? {
guard !array.isEmpty else {
return nil
}
defer {
self.array = self.array.adjacentDifference()
}
return self.array
}
}

public extension SequenceType where Generator.Element: Strideable {
public func adjacentDifference() -> [Self.Generator.Element.Stride] {
var result: [Self.Generator.Element.Stride] = []
var generator = AdjacentDifferenceGenerator(generator: self.generate())
while let difference = generator.next() {
result.append(difference)
}
return result
}
}

public extension SequenceType where Generator.Element: Strideable, Generator.Element.Stride: Strideable, Generator.Element.Stride.Stride == Generator.Element.Stride {
public func pyramidOfAdjacentDifferences() -> [[Self.Generator.Element.Stride]] {
var result: [[Self.Generator.Element.Stride]] = []
var array = self.adjacentDifference()
while !array.isEmpty {
result.append(array)
array = array.adjacentDifference()
}
//var generator = AdjacentDifferenceArrayGenerator(source: self)
//while let differences = generator.next() {
//result.append(differences)
//}
return result
}

在替代算法之后,靠近末尾注释的四行正在尝试使用与第一个扩展中的方法相同的算法。当我取消注释掉第一行时,光标在“AdjacentDifferenceArrayGenerator”处等待并显示:“无法使用类型为“的参数列表调用‘AdjacentDifferenceArrayGenerator<_>’类型的初始化程序(来源:Self )'"最后一个“Self”在错误消息中是大写的,尽管它在代码中不是大写的。在类型和初始化参数之间添加显式模板括号没有帮助。有什么想法吗?

最佳答案

我通过删除第一次迭代来解决这个问题:

public extension SequenceType where Generator.Element: Strideable, Generator.Element.Stride: Strideable, Generator.Element.Stride.Stride == Generator.Element.Stride {
public func pyramidOfAdjacentDifferences() -> [[Self.Generator.Element.Stride]] {
var result = [self.adjacentDifference()]
if result.first!.isEmpty {
return []
}

var generator = AdjacentDifferenceArrayGenerator(source: result.first!)
while let differences = generator.next() {
result.append(differences)
}
return result
}
}

我必须测试第一次迭代结果是否合法,因为将其从循环中取出意味着我失去了自动检查。我不知道是否使用“self”有问题,或者是使用通用序列而不是明确的数组有问题。这里仍然需要帮助......

关于swift - 无法从 Swift 中的协议(protocol)扩展调用通用初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36113362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com