Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了数组 – 创建一个扩展以从Swift中的数组中过滤nils大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我试图写一个扩展Array,它将允许一个可选的T的数组被转换成非可选T的数组。 例如这可以写成一个免费的函数,像这样: func removeAllNils(array: [T?]) -> [T] { return array .filter({ $0 != nil }) // remove nils, still a [T?] .map({ $0! }
@H_607_13@
我试图写一个扩展Array,它将允许一个可选的T的数组被转换成非可选T的数组。

例如这可以写成一个免费的函数,像这样:

func removeAllNils(array: [T?]) -> [T] {
    return array
        .filter({ $0 != nil })   // remove nils,still a [T?]
        .map({ $0! })            // convert each element from a T? to a T
}

但是,我不能让这个工作作为一个扩展。我试图告诉编译器扩展只适用于可选值数组。这是我到目前为止:

extension Array {
    func filterNils<U,T: Optional<U>>() -> [U] {
        return filter({ $0 != nil }).map({ $0! })
    }
}

(它不编译!)

不能限制为通用结构或类定义的类型 – 数组被设计为与任何类型一起使用,因此您不能添加一个适用于类型子集的方法。类型约束只能在声明通用类型时指定

实现你所需要的唯一方法是创建一个全局函数一个静态方法 – 在后一种情况下:

extension Array {
    static func filterNils(array: [T?]) -> [T] {
        return array.filter { $0 != nil }.map { $0! }
    }
}

var array:[Int?] = [1,nil,2,3,nil]

Array.filterNils(array)

大佬总结

以上是大佬教程为你收集整理的数组 – 创建一个扩展以从Swift中的数组中过滤nils全部内容,希望文章能够帮你解决数组 – 创建一个扩展以从Swift中的数组中过滤nils所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。