小编Jer*_*rry的帖子

对任意类型进行Swift排序

我有一组类型的实例Thingie,我想提供在Thingie的任何属性上排序的Thingies数组.例如,某些属性是Int,而其他属性是String,可能还有其他属性.所以我想创建一个排序例程,接受一个字符串作为属性的名称,并比较两个东西的两个属性来确定顺序.

对于仿制药而言,这似乎是一项工作,而且我已经接近了,但是有一个漏洞.

这就是我现在所处的位置:

func compare<T:Comparable>(lft: T, _ rgt: T) -> Bool {
    return lft < rgt
}

func orderBy(sortField: String) -> [Thingie] {
    let allArray = (self.thingies as NSSet).allObjects as! [Thingie]

    //typealias T = the type of allArray[0][sortField]
    // or maybe create an alias that conforms to a protocol:
    //typealias T:Comparable = ?

    return allArray.sort({(a, b) -> Bool in
        return self.compare(a[sortField] as! T, b[sortField] as! T)
    })
}
Run Code Online (Sandbox Code Playgroud)

我使用泛型创建了一个比较函数,并在我的排序例程中调用它.捕获AnyObject!对于我的泛型不起作用,因此我需要转换从a[sortField]和返回的值b[sortField]相同的类型.只要编译器很高兴两个值都属于同一类型并且它实现了Comparable协议,它甚至不重要.

我认为一个typealias可以做到这一点,但也许有更好的方法? …

generics swift

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

基于泛型类型的Swift泛型函数调用底层方法

我正在为别人的代码 (SEC) 编写一个接口,我有一长串的功能或多或少是这样的:

public func readString(_ row: Row, columnName: String) -> String? {
    return SEC.getString(row, columnName)
}

public func readInt(_ row: Row, columnName: String) -> Int? {
    return SEC.getInt(row, columnName)
}
Run Code Online (Sandbox Code Playgroud)

等等。

我想做的是有一个功能:

public func read<T>(_ row: Row, columnName: String) -> T? {
    // call correct SEC.get* method
}
Run Code Online (Sandbox Code Playgroud)

我尝试了一个简单的 switch 语句 onT和 on T.Type,但没有骰子。我还尝试了上述的修改版本:

public func read<T: ReadableType>(_ row: Row, columnName: String) -> T? {
    let getter = T.getterMethod
    return getter(row, columnName)
}
Run Code Online (Sandbox Code Playgroud)

我可以在哪里创建一个enum具有 …

generics swift metatype

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

自制的phpNN-xdebug失踪了吗?

我正在尝试使用自制软件在mac上安装php56-xdebug.关于如何做到这一点的所有建议似乎已经过时了两周.

我从明显开始:

$ brew install php56-xdebug
Error: No available formula with the name "php56-xdebug"
==> Searching for a previously deleted formula (in the last month)...
Error: No previously deleted formula found.
==> Searching for similarly named formulae...
==> Searching local taps...
Error: No similarly named formulae found.
==> Searching taps...
==> Searching taps on GitHub...
Error: No formulae found in taps.
Run Code Online (Sandbox Code Playgroud)

当我用brew search xdebug我得到

==> Searching local taps...
==> Searching taps on GitHub...
==> Searching blacklisted, migrated and …
Run Code Online (Sandbox Code Playgroud)

php homebrew xdebug

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

标签 统计

generics ×2

swift ×2

homebrew ×1

metatype ×1

php ×1

xdebug ×1