如何快速将呼叫委托给[0 .. <n]?

kfmfe04

背景

为了方便起见,我使用了以下别名:

typealias Deck = [Int]

我的需求在扩大,因此现在我已将代码转换为:

class Deck
{
  var deck : [Int]
  // ... other members
}

我可以通过委派我的大部分电话self.deck,但是在进行了一些搜索之后,我仍然很难弄清楚如何委派此电话:

let deck = Deck()
for i in deck[0..<5] { }   // <--- PROBLEMS HERE

问题

如何实施此电话的委托?

我认为这与subscriptrange(或者也许是sequence?)有关,但是我没有运气去搜索这两个主题的交集。

马丁·R

因为deck[0..<5]您需要实现Sliceable协议,而协议又需要CollectionTypeSequenceType

以下示例实现MutableCollectionType将设置元素也转发到数组的方法:

class Deck
{
    typealias DeckValueType = Int
    typealias DeckIndexType = Array<DeckValueType>.Index

    var deck : [DeckValueType] = [0, 1, 2, 3, 4, 5, 6] // just for demonstration ...
}

extension Deck : SequenceType {
    func generate() -> IndexingGenerator<[DeckValueType]> {
        return deck.generate()
    }
}

extension Deck: MutableCollectionType {
    var startIndex : DeckIndexType { return deck.startIndex }
    var endIndex : DeckIndexType { return deck.endIndex }

    subscript(index: DeckIndexType) -> DeckValueType {
        get {
            return deck[index]
        }
        set(newValue) {
            deck[index] = newValue
        }
    }
}

extension Deck : Sliceable {
    subscript (bounds: Range<DeckIndexType>) -> ArraySlice<DeckValueType> {
        get {
            return deck[bounds]
        }
    }
}

然后它起作用了:

let deck = Deck()
for i in deck[0..<5] {
    println(i)
}   

类型别名不是严格必需的,但是它们使区分是否Int用作数组元素的类型或用作数组索引的类型变得更加容易

您也可以将所有代码放入类定义中。我选择了单独的扩展名以明确说明哪种协议需要哪种方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何快速将呼叫委托给[0 .. <n]?

来自分类Dev

在vlookup时快速将#N / A替换为0

来自分类Dev

快速将<br>替换为\ n

来自分类Dev

如何快速将\ 0打印到标准输出

来自分类Dev

如何快速将\ 0打印到标准输出

来自分类Dev

如何快速将Python字节数组设置为0

来自分类Dev

如何快速将Int转换为int?

来自分类Dev

如何快速将字体更改为UITextView?

来自分类Dev

如何快速将字体更改为UITextView?

来自分类Dev

如何快速将NSURL转换为CFURL?

来自分类Dev

如何快速将UInt转换为Int?

来自分类Dev

如何快速将结果与.succeed比较

来自分类Dev

如何快速将大量的天插入MySQL?

来自分类Dev

如何快速将PFFile转换为UIImage?

来自分类Dev

快速将数字> = 0舍入到2的特定幂的倍数

来自分类Dev

如何使用快速代码从UITextView中删除\ n \ n?

来自分类Dev

如何从python列表中删除u'\ n \ n \ n \ n \ n \ n \ n \ n \ n'和u'\ xa0'

来自分类Dev

如何快速将文本包装在UIButton上

来自分类Dev

如何快速将地图中心放在用户的位置?

来自分类Dev

如何使用python快速将数据加载到内存中?

来自分类Dev

如何快速将像素从arraybuffer绘制到画布上?

来自分类Dev

如何快速将NSIndexPath添加到NSUserDefaults

来自分类Dev

如何快速将字典拆分成多个词典

来自分类Dev

如何快速将类实例设置为userdefaults?

来自分类Dev

如何快速将矩阵列表乘以向量列表?

来自分类Dev

如何快速将对象添加为NSMutableArray中的NSMutableArray

来自分类Dev

如何快速将字典分配给AnyObject

来自分类Dev

如何快速将熊猫数据框行转换为ordereddict

来自分类Dev

如何快速将数据从R导出到SQL Server

Related 相关文章

热门标签

归档