小编mil*_*los的帖子

+对任何对象的Swift数组比对数组的T更快

鉴于以下三个简单的功能:

func twice_Array_of_Int(a: [Int]) -> [Int] {
    return a + a
}

func twice_Array_of_T<T>(a: [T]) -> [T] {
    return a + a
}

func twice_Array_of_Any(a: [AnyObject]) -> [AnyObject] {
    return a + a
}
Run Code Online (Sandbox Code Playgroud)

假设发布版本(-Os),你会如何期望他们的性能进行比较?

我的期望是,它[Int] -> [Int]会比[AnyObject] -> [AnyObject]...... 快得多......它的速度要快几个数量级.

但是,我也期望[T] -> [T]表现得比... 更好,[AnyObject] -> [AnyObject]并且差不多[Int] -> [Int]......对吧?

在这里,我证明是错的:即使[AnyObject] -> [AnyObject](甚至包括演员回来)也要[Int]快5倍[T] -> [T]!这是令人失望的,因为泛型是Swift最有前途的功能之一.

在其中一个WWDC视频中,Apple工程师提到他们正在本地实现泛型,即使用它们不会导致代码膨胀.这是否解释了表现不佳[T] -> [T]?如果他们只是在编译时消耗的通用功能,性能[T] -> [T] …

generics performance swift

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

Some: AsyncSequence 不抛出的通用要求

我想以AsyncSequence取决于序列是否可以抛出的方式进行扩展。既不AsyncSequence明确AsyncIteratorProtocol区分这些序列。然而,并发模块确实带有带有抛出和非抛出变体的具体序列。我看到的唯一一般区别next是非抛出序列的方法是重新抛出。这是一个例子:

extension AsyncMapSequence : AsyncSequence {

    struct Iterator : AsyncIteratorProtocol {

        mutating func next() async rethrows -> Transformed?
    }
}
Run Code Online (Sandbox Code Playgroud)

而投掷变体是一个简单的throws

extension AsyncThrowingMapSequence : AsyncSequence {

    struct Iterator : AsyncIteratorProtocol {

        mutating func next() async throws -> Transformed?
    }
}
Run Code Online (Sandbox Code Playgroud)

(我什至不确定rethrows一个不带任何参数的方法如何可能。唯一想到的是这种方法的柯里化表达式可以对此有所启发......

因此,问题是如何表达以下内容:

extension AsyncSequence where AsyncIterator /* is not throwing */ {

}
Run Code Online (Sandbox Code Playgroud)

concurrency swift

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

OpenCV在游乐场

可以使用Objective-C++框架包装C++代码,以便在Swift代码中使用,包括Playground环境.我的一些框架包括OpenCV库,这在Swift正确包装时效果很好.不幸的是,由于以下错误,我无法在游乐场中使用这些:

Playground execution failed: error: Couldn't lookup symbols: _OBJC_CLASS_$_MyClass
Run Code Online (Sandbox Code Playgroud)

... 我的框架MyClass的子类在哪里NSObject.实际上,在链接到其中一个OpenCV库之后,没有框架符号可用于游乐场(例如,-lopencv_core在构建设置中添加到"其他链接器标志"之后),这些符号是否与OpenCV(或C++)有关.那件事).

我非常喜欢在导入框架的上下文中在游乐场中开发一些小功能,成功的解决方案最终将最终结束.同样,OpenCV对我来说是一个重要的图书馆,因此必须在游乐场玩它才能解放(更不用说有趣)了.

我还在使用Swift 1.2(OS 10.10.4),因为我即将向App Store提交更新,但如果Swift 2在这方面有任何改变,我会感兴趣.至于OpenCV,这是3.0.0版本,使用CMake和默认配置构建.

编辑:刚刚在Apple的论坛中发现了这个问题(比我更好,更普遍):https://forums.developer.apple.com/thread/6246

c++ opencv frameworks objective-c++ swift-playground

5
推荐指数
0
解决办法
853
查看次数