Error[8]: Undefined offset: 8, 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(

概述这是合法的(arr是一个数组): let arrenum = Array(arr.enumerated()) 那么为什么说这个不合法呢? extension Array { func f() { let arrenum = Array(self.enumerated()) // error: type of expression is ambiguous w @H_419_4@ 这是合法的(arr是一个数组):

let arrenum = Array(arr.enumerated())

那么为什么说这个不合法呢?

extension Array {    func f() {        let arrenum = Array(self.enumerated())        // error: type of Expression is ambiguous without more context    }}

编辑似乎这是一个解决方法:

extension Array {    func f() {        typealias Tup = (offset:Index,element:Element)        let arrenum = Array<Tup>(self.enumerated())    }}

但为什么需要呢? (是不是?)

@H_419_4@解决方法 这是一个已知的错误( SR-1789). Swift目前有一个功能,您可以在其自己的主体中引用泛型类型,而不必重复其占位符类型 – 编译器将推断它们与您自己的类型相同.

例如:

struct S<T> {  func foo(_ other: S) { // parameter inferred to be `S<T>`.    let x = S() // `x` inferred to be `S<T>`.  }}extension S {  func bar(_ other: S) {} // same in extensions too.}

这很方便,但是你遇到的错误是Swift总是会做出这个推断,即使它是不正确的.

所以,在你的例子中:

extension Array {    func f() {        let arrenum = Array(self.enumerated())        // error: type of Expression is ambiguous without more context    }}

Swift将代码解释为let arrenum = Array< Element>(self.enumerated()),因为你在Array< Element>的主体中.这是不正确的,因为enumerated()产生一系列偏移元素元组对 – Swift应该推断出Array为Array<(offset:Int,element:Element)>代替.

您已经发现的一种解决方法是显式指定占位符类型,以防止编译器进行此错误推理.

extension Array {  func f() {    let arrenum = Array<(offset: Int,element: Element)>(self.enumerated())  }}

另一种可能的解决方法似乎是使用完全限定类型,例如:

extension Array {  func f() {    let arrenum = Swift.Array(self.enumerated())  }}

因为看起来Swift并没有对完全限定类型做同样的推断(我不确定你是否应该依赖这个事实).

最后值得注意的是,不是调用Array的初始化器,而是使用map(_ :)代替完全避免这个问题:

extension Array {  func f() {    let arrenum = self.enumerated().map { [+++] }  }}

与初始化调用一样,它将返回一组偏移元素对.

@H_419_4@ @H_419_4@ @H_419_4@ @H_419_4@ 总结

以上是内存溢出为你收集整理的数组 – Swift数组()强制模糊,没有更多上下文 – 但仅限于扩展全部内容,希望文章能够帮你解决数组 – 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)
数组 – Swift数组()强制模糊,没有更多上下文 – 但仅限于扩展_app_内存溢出

数组 – Swift数组()强制模糊,没有更多上下文 – 但仅限于扩展

数组 – Swift数组()强制模糊,没有更多上下文 – 但仅限于扩展,第1张

概述这是合法的(arr是一个数组): let arrenum = Array(arr.enumerated()) 那么为什么说这个不合法呢? extension Array { func f() { let arrenum = Array(self.enumerated()) // error: type of expression is ambiguous w @H_419_4@ 这是合法的(arr是一个数组):

let arrenum = Array(arr.enumerated())

那么为什么说这个不合法呢?

extension Array {    func f() {        let arrenum = Array(self.enumerated())        // error: type of Expression is ambiguous without more context    }}

编辑似乎这是一个解决方法:

extension Array {    func f() {        typealias Tup = (offset:Index,element:Element)        let arrenum = Array<Tup>(self.enumerated())    }}

但为什么需要呢? (是不是?)

@H_419_4@解决方法 这是一个已知的错误( SR-1789). Swift目前有一个功能,您可以在其自己的主体中引用泛型类型,而不必重复其占位符类型 – 编译器将推断它们与您自己的类型相同.

例如:

struct S<T> {  func foo(_ other: S) { // parameter inferred to be `S<T>`.    let x = S() // `x` inferred to be `S<T>`.  }}extension S {  func bar(_ other: S) {} // same in extensions too.}

这很方便,但是你遇到的错误是Swift总是会做出这个推断,即使它是不正确的.

所以,在你的例子中:

extension Array {    func f() {        let arrenum = Array(self.enumerated())        // error: type of Expression is ambiguous without more context    }}

Swift将代码解释为let arrenum = Array< Element>(self.enumerated()),因为你在Array< Element>的主体中.这是不正确的,因为enumerated()产生一系列偏移元素元组对 – Swift应该推断出Array为Array<(offset:Int,element:Element)>代替.

您已经发现的一种解决方法是显式指定占位符类型,以防止编译器进行此错误推理.

extension Array {  func f() {    let arrenum = Array<(offset: Int,element: Element)>(self.enumerated())  }}

另一种可能的解决方法似乎是使用完全限定类型,例如:

extension Array {  func f() {    let arrenum = Swift.Array(self.enumerated())  }}

因为看起来Swift并没有对完全限定类型做同样的推断(我不确定你是否应该依赖这个事实).

最后值得注意的是,不是调用Array的初始化器,而是使用map(_ :)代替完全避免这个问题:

extension Array {  func f() {    let arrenum = self.enumerated().map {  }  }}

与初始化调用一样,它将返回一组偏移元素对.

@H_419_4@ @H_419_4@ @H_419_4@ @H_419_4@ 总结

以上是内存溢出为你收集整理的数组 – Swift数组()强制模糊,没有更多上下文 – 但仅限于扩展全部内容,希望文章能够帮你解决数组 – Swift数组()强制模糊,没有更多上下文 – 但仅限于扩展所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存