我有一组类型的实例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可以做到这一点,但也许有更好的方法? …
我正在为别人的代码 (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具有 …
我正在尝试使用自制软件在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)