我是否可以制作仅适用于字符串的Array扩展?
从Swift 2开始,这可以通过 协议扩展 来实现,该 协议扩展 为符合类型的类型(可选地受其他约束限制)提供方法和属性实现。
一个简单的例子:为所有符合SequenceType
(例如Array
)的类型定义一个方法,其中sequence元素为String
:
extension SequenceType where Generator.Element == String {
func joined() -> String {
return "".join(self)
}
}
let a = ["foo", "bar"].joined()
print(a) // foobar
不能struct Array
直接为扩展方法定义扩展方法,而只能为符合某种协议(带有可选约束)的所有类型定义扩展方法。因此,必须找到一种协议,该协议必须Array
遵循并提供所有必要的方法。在上面的示例中,即SequenceType
。
另一个示例如何将元素的正确位置插入Swift的排序数组中?:
extension CollectionType where Generator.Element : Comparable, Index : RandomAccessIndexType {
typealias T = Generator.Element
func insertionIndexOf(elem: T) -> Index {
var lo = self.startIndex
var hi = self.endIndex
while lo != hi {
// mid = lo + (hi - 1 - lo)/2
let mid = lo.advancedBy(lo.distanceTo(hi.predecessor())/2)
if self[mid] < elem {
lo = mid + 1
} else if elem < self[mid] {
hi = mid
} else {
return mid // found at position `mid`
}
}
return lo // not found, would be inserted at position `lo`
}
}
let ar = [1, 3, 5, 7]
let pos = ar.insertionIndexOf(6)
print(pos) // 3
此处将方法定义为的扩展,CollectionType
因为需要下标访问元素,并且元素必须是Comparable
。
在可能的副本上: 此线程不是在询问如何扩展类。它问为什么一个声明为的类可能会扩展另一个类。 从该线程: <code>final</code>类只是一个不能扩展的类。 但是,我有一个帮助程序类,我声明它是,并了另一个类: Eclipse没有检测到任何错误。我已经测试了这个类,并且PDF是成功生成的,没有错误。 为什么我能够课程,而理论上我不应该延长? (如果重要的话,我正在使用Java7。)
问题内容: 是否可以仅针对XHR请求限制Symfony 2路由?我想声明只能通过AJAX访问的路由。 我不想像这样在每个AJAX特定操作中添加一些额外的行: 我想定义: AJAX请求的一条规则 对相同URL进行GET / POST请求的一条规则 为了避开上述情况。 问题答案: 我知道这个问题有点老,但是与此同时 ,Symfony 2.4* 中引入 了 一种 新的解决方法 。 * 匹配表达式 对于a
问题内容: 我想扩展以增加对新协议的一致性-但仅适用于其元素本身符合特定协议的数组。 更笼统地说,我想让带有类型参数的类型(无论是协议类型还是具体类型)仅在类型参数与某些约束匹配时才实现协议。 从Swift 2.0开始,这似乎是不可能的。有什么我想念的方式吗? 例 假设我们有以下协议: 我们可以扩展现有的类型来实现它: 我们还可以扩展实现其所有元素时的实现: 在这一点上,类型本身应该实现,因为它符
我试图用vba做一个按钮来删除Excel表中的一行,但当我按下按钮并选择不止一行或许多单元格时,我想限制从E到I的选择(和行的数量无关)这里是我的代码,非常感谢,希望你能帮助我,我还没有找到任何类似的东西。
问题内容: 我有一个vpn连接,当我运行python -m SimpleHTTPServer时,它在0.0.0.0:8000上提供服务,这意味着可以通过本地主机 和 我的真实IP访问它。我不想让机器人扫描我,并且对仅通过本地主机访问服务器感兴趣。 可能吗? 也欢迎任何其他可以使用命令行立即执行的简单http服务器。 问题答案: 如果您阅读了源代码,您将看到只能在命令行上覆盖端口。如果你想改变它在服
问题内容: 我不确定如何更清楚地表达我的问题。基本上,PyPlot是否限于一个实例/窗口?我尝试的任何破解或变通办法要么导致程序冻结,要么使第二个pyplot窗口排队,直到第一个关闭。 问题答案: 当然,只需打开一个新图即可: 如果您在默认的python解释器中运行此命令,则此命令将无效,因为每个图形都需要输入gui的mainloop。如果要在交互式shell中运行事物,请查看IPython。但是