我已经阅读了其他主题,但他们似乎只处理单个字符分隔符,我认为Playground正在崩溃,因为我使用了多个char.
"[0, 1, 2, 1]".characters
.split(isSeparator: {[",", "[", "]"].contains($0)}))
.map(String.init) //["0", " 1", " 2", " 1"]
Run Code Online (Sandbox Code Playgroud)
有点工作,但我想用","而不是",".显然我可以使用[",","","[","]"]并抛出空格但是什么时候我只想删除字符串模式?
简而言之:如何将Swift字符串与其他较小的字符串分开?
这里有相当多的线程然而在Swift中使用Grand Central Dispatch来并行化并加速"for"循环?使用Swift <3.0代码而我无法在3中工作(参见代码).并行处理数组使用GCD使用指针并且它有点难看所以我要在这里断言我正在寻找好的Swift 3方法(当然尽可能高效).我也听说组很慢(?也许有人可以证实这一点.我也无法让小组工作.
这是我对跨步并行映射函数的实现(在Array的扩展中).它希望在全局队列上执行,以便不阻止UI.可能是并发位不需要在范围内,只需要余数循环.
extension Array {
func parallelMap<R>(striding n: Int, f: @escaping (Element) -> R, completion: @escaping ([R]) -> ()) {
let N = self.count
var res = [R?](repeating: nil, count: self.count)
DispatchQueue.global(qos: .userInitiated).async {
DispatchQueue.concurrentPerform(iterations: N/n) {k in
for i in (k * n)..<((k + 1) * n) {
res[i] = f(self[i]) //Error 1 here
}
}
//remainder loop
for i in (N - (N % n))..<N {
res[i] = …Run Code Online (Sandbox Code Playgroud) 我理解结构和类(和协议)如何在基本级别上工作.我有一个相当常见的情况:
我需要使用运算符的泛型值类型,它们必须在赋值时复制.这些类型具有复杂的结构,我希望能够通过子类化来专门化,否则会在任何地方复制代码,这将是糟糕的编程.
我已经尝试过协议和扩展但是因为协议不是通用的我无法定义我想要的(通用)运算符.如果我使用课程,我将不会复制作业.
今天的例子是我有Matrix和SquareMatrix,具有特定的方矩阵功能.有些运算符和矩阵可以由符合我的环协议的任何东西填充.我尝试使用关联类型和扩展来定义协议中的几乎所有功能.
编辑:我真的很想知道我应该编写什么.在矩阵情况下,我需要能够像任何其他矩阵一样传递方矩阵,所以子类化是唯一的选择吗?也许我错了.主要问题是当我必须编写一个讨论内部值的函数时,我必须知道泛型类型参数来做任何有用的事情.例如,当定义添加时,我必须创建一个新的矩阵并声明它的泛型类型,但是当我只知道某个(非泛型)协议时,我从哪里得到它 - 它的真实类型是通用的但是尽管协议具有这种关联类型,我没办法把它拿出来.
解决方案感谢alexander momchliov.基本上需要更多的工作来将代码完全移动到协议扩展中,并对所有相关类型使用"Self".在扩展中,编译器对泛型类型的内容感到满意.
代码是私密的,很抱歉,我无法在此问题中粘贴任何内容.感谢您的耐心和帮助.
这是我第一次使用GCD,我承认,很抱歉,如果我是愚蠢的.我有一个dispatch_after命令,对我来说是一个方便的延迟.
我的问题是,当我发送
dispatch_after(500000000000, dispatch_get_main_queue()){
println("triggered") //or any other code
}
Run Code Online (Sandbox Code Playgroud)
闭合被立即触发(例如我已经测试了这个并且立即触发了"触发"打印).它应该需要更长的时间吗?比500秒长.
谢谢 :)