我看到协议已经以两种方式宣布,但我没有找到差异。
练习1:
With sales as (
SELECT
DimProduct.ProductKey,
DimProduct.ProductName,
VW_ParallelSales.Saledate,
VW_ParallelSales.ParallelDate,
VW_ParallelSales.CurrentSales,
VW_ParallelSales.ParallelSales
FROM DimProduct INNER JOIN VW_ParallelSales ON DimProduct.ProductKey =
VW_ParallelSales.ProductKey
)
SELECT
s_recent.ProductName,
s_recent.Saledate ThisYear,
s_old.Saledate PreviousYear,
s_recent.CurrentSales CurrentSales,
s_old.CurrentSales ParallelSales
FROM
SALES s_recent
left outer join SALES s_old
on s_recent.saledate = s_old.saledate + 10000
and s_recent.ProductKey = s_old.ProductKey
练习2:
protocol AddItemViewControllerDelegate {
func controller(controller: AddItemViewController, didAddItem: String)
}
那么差异是什么?
答案 0 :(得分:4)
来自文档:
您可以将协议采用限制为类类型(而不是结构或类型) 枚举)通过将
class
关键字添加到协议的继承中 名单。 class关键字必须始终首先出现在协议中 继承列表,在任何继承的协议之前:protocol SomeClassOnlyProtocol: class, SomeInheritedProtocol { // class-only protocol definition goes here }
注意:
在该协议定义的行为时使用仅类协议 要求假定或要求符合类型具有参考 语义而不是价值语义。
答案 1 :(得分:1)
如果你想声明一个这样的变量:
protocol AddItemViewControllerDelegate: class {
func controller(controller: AddItemViewController, didAddItem: String)
}
你必须这样做:
$view = Zend_Controller_Front::getInstance()
->getParam('bootstrap')
->getResource('view');
$view->recordUID = XXXXXX