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标准库中是否有作用于集合的函数,采用谓词并返回从该集合中删除的值?
目前,我必须分两步实施:
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)
那就是我要寻找的功能。
我有一个函数如下:
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 请求不会在正文中返回任何内容,因此我试图找到一种方法来使用我设置的通用函数来表达这一点
我是快速学习的新手,遇到了这个问题,似乎找不到答案。我创建了一个 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玩耍,但遇到了一些麻烦flatMap。我已经看到了这个 StackOverflow问题,该问题描述了如何使用来展平数组的数组flatMap,但是当我在操场上重现相同的代码时,它并不会展平该数组。如果有人可以提供一些有关此处发生的情况的见解,我将不胜感激。
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是干什么用的?如果我删除此参数,代码仍然有效。那我需要它做什么?