相关疑难解决方法(0)

Swift中构造泛型类型的扩展

是否可以为专用/构造的泛型类型扩展泛型类?我想用一种方法扩展Int Arrays以计算其元素的总和.

例如

extension Array<Int> {

    func sum() -> Int {
        return reduce(0) { $0 + $1 }
    }

}
Run Code Online (Sandbox Code Playgroud)

generics swift

48
推荐指数
3
解决办法
3万
查看次数

为什么Swift中的过滤器会迭代集合两次?

Swift操场或控制台应用程序中的以下代码:

let letters = ["A", "B", "C"]

letters.filter({
    (x : String) -> Bool in
    println("PRINT: \(x)")
    return true
})
Run Code Online (Sandbox Code Playgroud)

打印出来:

PRINT: A
PRINT: B
PRINT: C
PRINT: A
PRINT: B
PRINT: C
Run Code Online (Sandbox Code Playgroud)

为什么它会两次迭代集合?

swift

14
推荐指数
2
解决办法
1703
查看次数

在Swift 3中扩展类型化的数组(像Bool这样的原始类型)?

以前在Swift 2.2中我能做到:

extension _ArrayType where Generator.Element == Bool{
    var allTrue : Bool{
        return !self.contains(false)
    }
}
Run Code Online (Sandbox Code Playgroud)

[Bool]随着延伸.allTrue.例如

[true, true, false].allTrue == false
Run Code Online (Sandbox Code Playgroud)

但是在Swift 3.0中我遇到了这个错误:

未申报的类型 _ArrayType


所以我尝试将其切换为Array使用new关键字Iterator

extension Array where Iterator.Element == Bool
    var allTrue : Bool{
        return !self.contains(false)
    }
}
Run Code Online (Sandbox Code Playgroud)

但我有一个不同的错误抱怨我强迫元素是非泛型的

相同类型的要求使通用参数'Element'非通用


我也在这个2年的帖子中尝试了解决方案,但无济于事.

那么如何在Swift 3中扩展原始类型的数组,如Bool?

arrays extension-methods swift swift3

12
推荐指数
2
解决办法
964
查看次数

如何制作一个快速的类对象数组的深层副本

所以我知道swift数组是作为struct实现的,它会自动自动复制.

我已经写了我的课MyClass,我已经实现copyWithZone了复制它

但是,我的swift数组包含我的MyClass对象,例如:

var array = [MyClass]()

当我想制作那个阵列的副本时

var anotherArray = array

它仍然没有调用MyClassObject.copyWithZone,后来如果我更改了对象属性array,anotherArray也会反映出更改.

如何在编写for循环来迭代每个对象的情况下复制它?

它不像swift中的对象数组的深层副本那样重复,因为我不能使用struct来重写我的类.

ios swift

6
推荐指数
2
解决办法
6883
查看次数

扩展Swift中的所有类型?

浏览Swift的库代码我发现:

extension T! : Printable {
  var description: String { get }
}
Run Code Online (Sandbox Code Playgroud)

该代码段似乎使用"description"字段扩展了所有类型.当我尝试在我的代码中执行相同的操作时,我收到错误:

example.swift:10:11:非名义类型'T!' 不能延长

protocol MyProtocol {
  // ...
}

extension T! : MyProtocol { // error: Non-nominal...
  // ...
}
Run Code Online (Sandbox Code Playgroud)

有类似的问题:

但他们未能解决:

  • 这里发生了什么?为什么库代码没问题,但我的代码......不是吗?
  • 是否可以符合特定协议的所有类型或所有类型?

generics swift

4
推荐指数
1
解决办法
2313
查看次数

如何在不进行类型转换的情况下实现扁平化作为数组的扩展?

extension Array {
  func flatten<T>() -> T[] {
    let xs = (self as Any) as Array<Array<T>>
    return xs.reduce(T[](), +)
  }
}
Run Code Online (Sandbox Code Playgroud)

它有效,但我不确定是否需要所有这些转换。

有没有更好的办法?

为了进行比较,这里是 swift 扩展库之一中的实现。我不确定他们是否也已经弄清楚了——他们的实施始于以下评论:

// 这里还有一些工作要做

arrays generics swift

4
推荐指数
1
解决办法
982
查看次数

标签 统计

swift ×6

generics ×3

arrays ×2

extension-methods ×1

ios ×1

swift3 ×1