簡體   English   中英

Swift 3中通用協議類型的變量

[英]Variable of generic protocol type in Swift 3

在Swift中是否可以使用通用協議的類型聲明變量?

如果沒有,有哪些替代方案? 我無法重用具有不同類型參數的協議,這似乎是一個巨大的缺點,更不用說對其進行模擬了。

我不確定這是否是您的意思,但是您可以執行以下操作:

public typealias SuccessBlock<T> = (_ data: T) -> (Void)

然后定義變量:

var myBlock: SuccessBlock<String>

我的解決方法是非通用協議。 同意關於限制的多數民眾贊成在傷害。 由於缺少關聯類型而造成的限制必須在協議中使用元素的基礎,所有其他內部都可以與泛型一起使用

//: Playground - noun: a place where people can play

import UIKit
import Foundation

class Item: NSObject {

}

protocol Datasource {

    subscript(index: Int) -> NSObjectProtocol? { get }
}

class BaseDatasource<Element: NSObjectProtocol>: Datasource {

    private(set) var data: [Element]?

    subscript(index: Int) -> NSObjectProtocol? {
        get {
            return data?[index]
        }
    }

    func sortedData(_ data: [Element]) -> [Element] {
        return data
    }
}

class ItemsDatasource: BaseDatasource<Item> {
    ///some specific code
}

var dataOfInts: Datasource?

dataOfInts = ItemsDatasource()//or BaseDatasource<Item>()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM