相关疑难解决方法(0)

在Swift中展平数组数组

Swift中是否有flattenScala,Xtend,Groovy,Ruby和co?

var aofa = [[1,2,3],[4],[5,6,7,8,9]]
aofa.flatten() // shall deliver [1,2,3,4,5,6,7,8,9] 
Run Code Online (Sandbox Code Playgroud)

当然我可以使用reduce,但那有点糟透了

var flattened = aofa.reduce(Int[]()){
    a,i in var b : Int[] = a
    b.extend(i)
    return b
}
Run Code Online (Sandbox Code Playgroud)

swift

124
推荐指数
6
解决办法
5万
查看次数

Swift中的drop(where:{})remove(where:{})函数?

Swift标准库中是否有作用于集合的函数,采用谓词并返回从该集合中删除的值?

目前,我必须分两步实施:

guard let idx = allAnnotations.index(where: {$0 is MKUserLocation}) else {return}
let userLocation = allAnnotations.remove(at: idx) as! MKUserLocation
Run Code Online (Sandbox Code Playgroud)

但是我想,存在类似的功能。

目标

我有以下数组:

[Type1, Type1, Type1, Type1, Type1, Type1, Type2]
Run Code Online (Sandbox Code Playgroud)

Type2数组中可能存在也可能不存在。除了这两种以外,没有其他类型。

我需要将其分为两个元素:

[Type1, Type1, Type1, Type1, Type1, Type1]
Run Code Online (Sandbox Code Playgroud)

Type2?
Run Code Online (Sandbox Code Playgroud)

那就是我要寻找的功能。

arrays collections swift

5
推荐指数
1
解决办法
817
查看次数

如何将 nil 作为可选泛型函数参数传递

我有一个函数如下:

func request<D: Decodable>(from urlString: String,
                           useToken: Bool = false,
                           requestType: RequestType = .get,
                           body: Data? = nil,
                           expecting type: D.Type? = nil,
                           completion: @escaping (Result<D?>) -> Void)
Run Code Online (Sandbox Code Playgroud)

是否可以这样做:request(..., expecting: nil)func request<D: Decodable>(... expecting type: D.Type? = nil)

我认为我已经达到了如何使用泛型的限制,因为当我这样做时,我得到的编译错误与我正在处理的代码完全无关,所以我认为编译器可能会感到困惑。

当我使用该函数时,例如:request(from: "https:..", requestType: .post, body: body),编译器抱怨说Enum element 'post' cannot be referenced as an instance member

我的一些 API 请求不会在正文中返回任何内容,因此我试图找到一种方法来使用我设置的通用函数来表达这一点

generics swift option-type

5
推荐指数
1
解决办法
2425
查看次数

Swift:遍历 Any 类型的集合?

我是快速学习的新手,遇到了这个问题,似乎找不到答案。我创建了一个 Any 类型的集合,其中包括 Double、String、Int 和 Bool。当我尝试遍历它时,出现错误:

“协议类型‘Any’的值不能符合‘Sequence’。

这是练习:

“创建一个 [Any] 类型的集合,包括集合中的一些双精度数、整数、字符串和布尔值。打印集合的内容。”

var items: Any = [5.2, "Hello", 2, true]
print(items)
Run Code Online (Sandbox Code Playgroud)

“循环遍历集合。对于每个整数,打印“整数的值为“,然后是整数值。对双精度数、字符串和布尔值重复这些步骤。”

for item in items {
    if let unwrappedItem = item as? Int {
        print("The integer has a value of \(item)")
    } else if let unwrappedItem = item as? Double {
        print("The integer has a value of \(item)")
    }
}
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

swift

2
推荐指数
1
解决办法
137
查看次数

Swift 4-FlatMap无法展平数组

我正在和Swift玩耍,但遇到了一些麻烦flatMap。我已经看到了这个 StackOverflow问题,该问题描述了如何使用来展平数组的数组flatMap,但是当我在操场上重现相同的代码时,它并不会展平该数组。如果有人可以提供一些有关此处发生的情况的见解,我将不胜感激。

这是代码和结果的屏幕截图:在此处输入图片说明

arrays flatmap swift swift4

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

这个函数参数是干什么用的?

func load<T: Decodable>(_ filename: String, as type: T.Type = T.self) -> T {
    let data: Data

    guard let file = Bundle.main.url(forResource: filename, withExtension: nil)
        else {
            fatalError("Couldn't find \(filename) in main bundle.")
    }

    do {
        data = try Data(contentsOf: file)
    } catch {
        fatalError("Couldn't load \(filename) from main bundle:\n\(error)")
    }

    do {
        let decoder = JSONDecoder()
        return try decoder.decode(T.self, from: data)
    } catch {
        fatalError("Couldn't parse \(filename) as \(T.self):\n\(error)")
    }
}

load("jsonFilePath")
Run Code Online (Sandbox Code Playgroud)

该函数从 JSON 中提取数据。这个“参数”type: T.Type = T.self是干什么用的?如果我删除此参数,代码仍然有效。那我需要它做什么?

generics types swift

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

标签 统计

swift ×6

arrays ×2

generics ×2

collections ×1

flatmap ×1

option-type ×1

swift4 ×1

types ×1