小编Jos*_*oid的帖子

如何在Swift中将字典切片转换为字典

我正在尝试转换myDictionary.dropFirst()为缺少一个键的新词典(我不关心哪一个).dropFirst()返回一个切片.我想要一个与之相同类型的新词典myDictionary.

您可以将Array切片转换为这样的数组let array = Array(slice).什么是字典的等价物?如果我尝试字典(切片),我得到编译错误Argument labels '(_:)' do not match any available overloads

提前谢谢了.

slice swift

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

如何创建扩展以允许自定义类型的数组符合协议?

我有一个自定义类型Banana,我想创建一个Array(或者,如果必须的话,Sequence) of的扩展Banana以符合协议,CustomStringConvertible以便调用descriptionof 数组Banana将返回“一堆香蕉”。这是可能的,如果是这样,我将如何去做?

arrays swift swift-protocols

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

如何使用 Dispatch Groups 等待调用依赖于不同数据的多个函数?

我有三个变量abc。我有三个带有完成块的异步函数来更新这些变量,另外三个函数只处理一些数据。

我确保工作函数等到所有数据都更新为DispatchGroup.

// The Data
var a: String?
var b: String?
var c: String?

// The Update
let group = DispatchGroup()

group.enter()
updateA() {
    group.leave()
}

group.enter()
updateB() {
    group.leave()
}

group.enter()
updateC() {
    group.leave()
}

group.wait()

// The work
doSomthingWith(a: a, b: b)
doSomethingElseWith(b: b, c: c)
doAnotherThingWith(a: a, c: c)
Run Code Online (Sandbox Code Playgroud)

我希望能够做的是在参数更新后调用每个工作函数,而不是等待一切。这只是一个(显然)简化版本。可能有更多的变量和函数。

我正在使用斯威夫特。提前谢谢了。

grand-central-dispatch swift dispatchgroup

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

如何传递一个闭包,该闭包返回一个符合Equatable的值到函数中

我正在尝试创建一个扩展,Array根据应用了闭包的项返回一个新的唯一项数组.

例如:如果我有一个Apple苹果具有属性名称和来源的数组,那么我将调用每个来源的一个Appleapple.uniqued(on: { $0.origin })

这是我到目前为止的代码:

extension Array where Element: Equatable {
    func uniqued(on extract: (Element) -> Equatable) { // A
        let elementsAndValues = map { (item: $0, extracted: extract($0)) } // 1

        var uniqueValues: [Element] = []
        var uniqueExtracts: [Equatable] = [] // A

        elementsAndValues.forEach { (item, extracted) in
            if !uniqueExtracts.contains(extracted) { // 3, B
                uniqueValues += [item]
                uniqueExtracts += [extracted]
            }
        }

        return uniqueValues
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该如下工作:

  1. 创建一个元组数组,包含原始元素(item)和应用了闭包的元素(提取)
  2. 如果uniqueExtracts不包含该项,请添加该项并将该项添加到uniqueItems数组中.

我得到的错误是:

A)"协议'SomeProtocol'只能用作通用约束,因为它具有Self或相关类型要求"(两次)

B)"缺少参数标签"其中:'在通话中'

我正在使用最新版本的Xcode.任何建议都会有很多帮助.非常感谢.

arrays protocols swift

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

日历的 startOfDay() 给出的某些日期的时间不正确

startOfDay(for: )当使用以下参数调用时,我得到了一个小时后的日期Date(timeIntervalSince1970: 0)

例如:

let twoThousandAndOne = Date(timeIntervalSinceReferenceDate: 0)
let nineteenSeventy = Date(timeIntervalSince1970: 0)

print("Two thousand and one: \(twoThousandAndOne)")
print("Nineteen seventy: \(nineteenSeventy)")

let calendar = Calendar.current

print("Start of two thousand and one: \(calendar.startOfDay(for: twoThousandAndOne))")
print("Start of nineteen seventy: \(calendar.startOfDay(for: nineteenSeventy))")
Run Code Online (Sandbox Code Playgroud)

输出:

Two thousand and one: 2001-01-01 00:00:00 +0000
Nineteen seventy: 1970-01-01 00:00:00 +0000
Start of two thousand and one: 2001-01-01 00:00:00 +0000
Start of nineteen seventy: 1969-12-31 23:00:00 +0000
Run Code Online (Sandbox Code Playgroud)

date ios

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