小编JHZ*_*JHZ的帖子

如何根据Swift API设计指南调整协议/实现对?

在新的Swift API设计指南中,Type正在使用常用的协议后缀.虽然这对于独立(SequenceType成为Sequence)协议很容易做,但我不确定如何更新我的API,其中协议为实现提供了基础.以下是流行框架的一些示例:

  • 结果 μframework提供Result,混凝土成功/失败枚举,并且ResultType,通用基础协议用于成功/失败类型,向其中Result符合.
  • ReactiveCocoa的主要类型是SignalSignalProducer,由SignalType和支持SignalProducerType.

在这两种情况下,大部分实现都是对协议的扩展,允许扩展使用类型约束的全部功能,并允许实现是通用的.这是从协议的情况下,不同AnySequence风格类型擦除类型:你是不是真的有望实现你自己的这些协议,或统一不同的类型.

api-design naming-conventions swift

21
推荐指数
1
解决办法
2246
查看次数

"git diff"中的"diff --git"输出是指什么?

当我运行时git diff,输出开始于:

diff --git a/foo/bar b/foo/bar
Run Code Online (Sandbox Code Playgroud)

如果我尝试运行普通的旧版本diff --git,我会被告知该--git选项不存在(显然,我认为,对于低级别工具来说,了解特定的DVCS似乎很愚蠢).man页面中也没有提到它.这是从哪里来的?

git

20
推荐指数
1
解决办法
9242
查看次数

泛型和协议类型函数参数之间的实际差异是什么?

给定没有任何关联类型的协议:

protocol SomeProtocol
{
    var someProperty: Int { get }
}
Run Code Online (Sandbox Code Playgroud)

这两个函数在实践中有什么区别(意思不是"一个是通用的而另一个不是")?它们是否生成不同的代码,它们具有不同的运行时特征吗?当一个或多个协议变得非常重要时,这些差异是否会发生变化?(因为编译器可能内联这样的东西)

func generic<T: SomeProtocol>(some: T) -> Int
{
    return some.someProperty
}

func nonGeneric(some: SomeProtocol) -> Int
{
    return some.someProperty
}
Run Code Online (Sandbox Code Playgroud)

我主要询问编译器的不同之处,我理解两者的语言级含义.基本上,确实nonGeneric意味着一个恒定的代码大小但速度较慢的动态调度,而不是generic每个类型传递的代码大小增加,但是使用快速静态调度?

generics swift swift-protocols

17
推荐指数
1
解决办法
1357
查看次数