Error[8]: Undefined offset: 6, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我不得不在 Swift中使用类型擦除几次,但它总是涉及通用协议.在这种情况下,它涉及通用枚举和通用协议,我很难过. 这是我的通用枚举和通用协议,具有必要的扩展: enum UIState<T> { case Loading case Success([T]) case Failure(ErrorType)}protocol ModelsDelegate: class 我不得不在 Swift中使用类型擦除几次,但它总是涉及通用协议.在这种情况下,它涉及通用枚举和通用协议,我很难过.

这是我的通用枚举和通用协议,具有必要的扩展:

enum UIState<T> {    case Loading    case Success([T])    case Failure(ErrorType)}protocol ModelsDelegate: class {    associatedtype Model    var state: UIState<[Model]> { get set }}extension ModelsDelegate {    func getNewState(state: UIState<[Model]>) -> UIState<[Model]> {        return state    }    func setNewState(models: UIState<[Model]>) {        state = models    }}

这是我的类型擦除泛型类:

class AnyModelsDelegate<T>: ModelsDelegate {    var state: UIState<[T]> {        get { return _getNewState(UIState<[T]>) }  // Error #1        set { _setNewState(newValue) }    }    private let _getNewState: ((UIState<[T]>) -> UIState<[T]>)    private let _setNewState: (UIState<[T]> -> VoID)    required init<U: ModelsDelegate where U.Model == T>(_ models: U) {        _getNewState = models.getNewState        _setNewState = models.setNewState    }}

我收到以下错误(它们在代码示例中标记):

错误#1:

无法转换类型'(UIState< [T]>)的值.输入'(又名’UIState< Array< T>> .Type’)到预期的参数类型’UIState< [_]>‘ (又名’UIState< Array< _>>’)

我已经研究了一段时间了,这段代码有很多变化,“几乎可以工作”.错误总是与getter有关.

解决方法 导致此错误的问题(如 @dan has pointed out)是在此行上您尝试将类型作为参数传递,而不是该类型的实例:

get { return _getNewState(UIState<[T]>) }

但是,我首先会质疑你对这个函数使用一个参数,肯定一个get函数根本就没有参数?在这种情况下,您只需要_getNewState函数具有signature() – > UIState< [T]>,并将其称为:

get { return _getNewState() }

此外,如果您的协议扩展中的getNewState和setNewState(_ :)函数仅存在,以便将您的state属性的获取和设置转发到类型擦除 – 您可以通过完全删除它们并使用闭包来简化代码而在类型擦除的init中的表达式:

_getNewState = { models.state }_setNewState = { models.state = 
enum UIState<T> {    case Loading    case Success([T])    case Failure(ErrorType)}protocol ModelsDelegate: class {    associatedtype Model    var state: UIState<Model> { get set }}class AnyModelsDelegate<T>: ModelsDelegate {    var state: UIState<T> {        get { return _getNewState() }        set { _setNewState(newValue) }    }    private let _getNewState: () -> UIState<T>    private let _setNewState: (UIState<T>) -> VoID    required init<U: ModelsDelegate where U.Model == T>(_ models: U) {        _getNewState = { models.state }        _setNewState = { models.state = [+++] }    }}
}

(这些工作通过捕获模型参数的引用,有关详细信息,请参阅Closures: Capturing Values)

最后,我怀疑你的意思是指UIState< T>而不是UIState< [T]>在整个代码中,因为T在这种情况下引用了.Success案例中的一个元素作为关联值(除非你想要一个2D数组).

总而言之,通过上面提出的更改,您将希望您的代码看起来像这样:

[+++] 总结

以上是内存溢出为你收集整理的ios – 具有通用枚举和通用协议的Swift类型擦除全部内容,希望文章能够帮你解决ios – 具有通用枚举和通用协议的Swift类型擦除所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 7, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我不得不在 Swift中使用类型擦除几次,但它总是涉及通用协议.在这种情况下,它涉及通用枚举和通用协议,我很难过. 这是我的通用枚举和通用协议,具有必要的扩展: enum UIState<T> { case Loading case Success([T]) case Failure(ErrorType)}protocol ModelsDelegate: class 我不得不在 Swift中使用类型擦除几次,但它总是涉及通用协议.在这种情况下,它涉及通用枚举和通用协议,我很难过.

这是我的通用枚举和通用协议,具有必要的扩展:

enum UIState<T> {    case Loading    case Success([T])    case Failure(ErrorType)}protocol ModelsDelegate: class {    associatedtype Model    var state: UIState<[Model]> { get set }}extension ModelsDelegate {    func getNewState(state: UIState<[Model]>) -> UIState<[Model]> {        return state    }    func setNewState(models: UIState<[Model]>) {        state = models    }}

这是我的类型擦除泛型类:

class AnyModelsDelegate<T>: ModelsDelegate {    var state: UIState<[T]> {        get { return _getNewState(UIState<[T]>) }  // Error #1        set { _setNewState(newValue) }    }    private let _getNewState: ((UIState<[T]>) -> UIState<[T]>)    private let _setNewState: (UIState<[T]> -> VoID)    required init<U: ModelsDelegate where U.Model == T>(_ models: U) {        _getNewState = models.getNewState        _setNewState = models.setNewState    }}

我收到以下错误(它们在代码示例中标记):

错误#1:

无法转换类型'(UIState< [T]>)的值.输入'(又名’UIState< Array< T>> .Type’)到预期的参数类型’UIState< [_]>‘ (又名’UIState< Array< _>>’)

我已经研究了一段时间了,这段代码有很多变化,“几乎可以工作”.错误总是与getter有关.

解决方法 导致此错误的问题(如 @dan has pointed out)是在此行上您尝试将类型作为参数传递,而不是该类型的实例:

get { return _getNewState(UIState<[T]>) }

但是,我首先会质疑你对这个函数使用一个参数,肯定一个get函数根本就没有参数?在这种情况下,您只需要_getNewState函数具有signature() – > UIState< [T]>,并将其称为:

get { return _getNewState() }

此外,如果您的协议扩展中的getNewState和setNewState(_ :)函数仅存在,以便将您的state属性的获取和设置转发到类型擦除 – 您可以通过完全删除它们并使用闭包来简化代码而在类型擦除的init中的表达式:

_getNewState = { models.state }_setNewState = { models.state = 
enum UIState<T> {    case Loading    case Success([T])    case Failure(ErrorType)}protocol ModelsDelegate: class {    associatedtype Model    var state: UIState<Model> { get set }}class AnyModelsDelegate<T>: ModelsDelegate {    var state: UIState<T> {        get { return _getNewState() }        set { _setNewState(newValue) }    }    private let _getNewState: () -> UIState<T>    private let _setNewState: (UIState<T>) -> VoID    required init<U: ModelsDelegate where U.Model == T>(_ models: U) {        _getNewState = { models.state }        _setNewState = { models.state =  }    }}
}

(这些工作通过捕获模型参数的引用,有关详细信息,请参阅Closures: Capturing Values)

最后,我怀疑你的意思是指UIState< T>而不是UIState< [T]>在整个代码中,因为T在这种情况下引用了.Success案例中的一个元素作为关联值(除非你想要一个2D数组).

总而言之,通过上面提出的更改,您将希望您的代码看起来像这样:

[+++] 总结

以上是内存溢出为你收集整理的ios – 具有通用枚举和通用协议的Swift类型擦除全部内容,希望文章能够帮你解决ios – 具有通用枚举和通用协议的Swift类型擦除所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
ios – 具有通用枚举和通用协议的Swift类型擦除_app_内存溢出

ios – 具有通用枚举和通用协议的Swift类型擦除

ios – 具有通用枚举和通用协议的Swift类型擦除,第1张

概述我不得不在 Swift中使用类型擦除几次,但它总是涉及通用协议.在这种情况下,它涉及通用枚举和通用协议,我很难过. 这是我的通用枚举和通用协议,具有必要的扩展: enum UIState<T> { case Loading case Success([T]) case Failure(ErrorType)}protocol ModelsDelegate: class 我不得不在 Swift中使用类型擦除几次,但它总是涉及通用协议.在这种情况下,它涉及通用枚举和通用协议,我很难过.

这是我的通用枚举和通用协议,具有必要的扩展:

enum UIState<T> {    case Loading    case Success([T])    case Failure(ErrorType)}protocol ModelsDelegate: class {    associatedtype Model    var state: UIState<[Model]> { get set }}extension ModelsDelegate {    func getNewState(state: UIState<[Model]>) -> UIState<[Model]> {        return state    }    func setNewState(models: UIState<[Model]>) {        state = models    }}

这是我的类型擦除泛型类:

class AnyModelsDelegate<T>: ModelsDelegate {    var state: UIState<[T]> {        get { return _getNewState(UIState<[T]>) }  // Error #1        set { _setNewState(newValue) }    }    private let _getNewState: ((UIState<[T]>) -> UIState<[T]>)    private let _setNewState: (UIState<[T]> -> VoID)    required init<U: ModelsDelegate where U.Model == T>(_ models: U) {        _getNewState = models.getNewState        _setNewState = models.setNewState    }}

我收到以下错误(它们在代码示例中标记):

错误#1:

无法转换类型'(UIState< [T]>)的值.输入'(又名’UIState< Array< T>> .Type’)到预期的参数类型’UIState< [_]>‘ (又名’UIState< Array< _>>’)

我已经研究了一段时间了,这段代码有很多变化,“几乎可以工作”.错误总是与getter有关.

解决方法 导致此错误的问题(如 @dan has pointed out)是在此行上您尝试将类型作为参数传递,而不是该类型的实例:

get { return _getNewState(UIState<[T]>) }

但是,我首先会质疑你对这个函数使用一个参数,肯定一个get函数根本就没有参数?在这种情况下,您只需要_getNewState函数具有signature() – > UIState< [T]>,并将其称为:

get { return _getNewState() }

此外,如果您的协议扩展中的getNewState和setNewState(_ :)函数仅存在,以便将您的state属性的获取和设置转发到类型擦除 – 您可以通过完全删除它们并使用闭包来简化代码而在类型擦除的init中的表达式:

_getNewState = { models.state }_setNewState = { models.state = 
enum UIState<T> {    case Loading    case Success([T])    case Failure(ErrorType)}protocol ModelsDelegate: class {    associatedtype Model    var state: UIState<Model> { get set }}class AnyModelsDelegate<T>: ModelsDelegate {    var state: UIState<T> {        get { return _getNewState() }        set { _setNewState(newValue) }    }    private let _getNewState: () -> UIState<T>    private let _setNewState: (UIState<T>) -> VoID    required init<U: ModelsDelegate where U.Model == T>(_ models: U) {        _getNewState = { models.state }        _setNewState = { models.state =  }    }}
}

(这些工作通过捕获模型参数的引用,有关详细信息,请参阅Closures: Capturing Values)

最后,我怀疑你的意思是指UIState< T>而不是UIState< [T]>在整个代码中,因为T在这种情况下引用了.Success案例中的一个元素作为关联值(除非你想要一个2D数组).

总而言之,通过上面提出的更改,您将希望您的代码看起来像这样:

总结

以上是内存溢出为你收集整理的ios – 具有通用枚举和通用协议的Swift类型擦除全部内容,希望文章能够帮你解决ios – 具有通用枚举和通用协议的Swift类型擦除所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1049961.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存