标签: protocols

Swift - 要求实现协议的类是某个类的子类

我正在创建几个NSView类,所有类都支持特殊操作,我们将调用它们transmogrify.乍一看,这似乎是协议的完美之处:

protocol TransmogrifiableView {
    func transmogrify()
}
Run Code Online (Sandbox Code Playgroud)

然而,该协议并没有执行,每一个TransmogrifiableView是一个NSView为好.这意味着NSView我在a上调用的任何方法TransmogrifiableView都不会键入check:

let myView: TransmogrifiableView = getTransmogrifiableView()
let theSuperView = myView.superView // error: TransmogrifiableView does not have a property called 'superview'
Run Code Online (Sandbox Code Playgroud)

我不知道如何要求实现我的协议的所有类也是子类NSView.我试过这个:

protocol TransmogrifiableView: NSView {
    func transmogrify()
}
Run Code Online (Sandbox Code Playgroud)

但是Swift抱怨协议不能从类继承.将协议转换为仅使用类的协议没有帮助

protocol TransmogrifiableView: class, NSView {
    func transmogrify()
}
Run Code Online (Sandbox Code Playgroud)

我不能创建TransmogrifiableView超类而不是协议,因为我的一些TransmogrifiableView类必须是其他非transmogrifiable视图的子类.

我应该如何要求所有TransmogrifiableView的也可以NSView的?我真的不想用as"转换"来改变我的代码,这种转换形式不好而且分散注意力.

inheritance protocols interface typechecking swift

37
推荐指数
4
解决办法
2万
查看次数

.delegate = self是什么意思?

任何人都可以解释的意义someViewController.delegate = selfself.delegate?他们在哪里帮助我们?

cocoa delegates protocols delegation objective-c

36
推荐指数
1
解决办法
2万
查看次数

PING使用哪些协议?

好吧,我知道这个问题的答案是ICMP - 我所有的教科书都这么说,互联网就这么说,每个人都这么说......除了我的TA.根据这个TA ping不仅用于ICMP,还用于IP,arp和其他一些.那么...用于ping的协议是哪些?ICMP以外的其他?

networking protocols ping

36
推荐指数
2
解决办法
12万
查看次数

在Xcode中自动实现Swift协议方法

我刚开始使用swift语言并且来自java它到目前为止看起来很棒.但我真的错过了一些东西:

Eclipse有这个很棒的功能,当我添加"implements XYZ"时,它为我提供了一个自动实现必要的函数存根的功能.这是一个巨大的节省时间.

Xcode似乎没有这个功能,或者我错过了什么?

我找到了accessorize插件,但这似乎只适用于Objective C ..

有解决方案吗?

PS.我正在使用Xcode 6.1.1

xcode protocols autocomplete ios swift

36
推荐指数
2
解决办法
2万
查看次数

Swift Equatable on a protocol

我不认为这可以做,但无论如何我都会问.我有一个协议:

protocol X {}
Run Code Online (Sandbox Code Playgroud)

一节课:

class Y:X {}
Run Code Online (Sandbox Code Playgroud)

在我的其余代码中,我使用协议X引用所有内容.在该代码中,我希望能够执行以下操作:

let a:X = ...
let b:X = ...
if a == b {...}
Run Code Online (Sandbox Code Playgroud)

问题是,如果我尝试实现Equatable:

protocol X: Equatable {}
func ==(lhs:X, hrs:X) -> Bool {
    if let l = lhs as? Y, let r = hrs as? Y {
        return l.something == r.something
    }
    return false
} 
Run Code Online (Sandbox Code Playgroud)

尝试允许使用==隐藏协议背后的实现的想法.

Swift不喜欢这个,因为它EquatableSelf引用,它将不再允许我将它用作类型.仅作为一般参数.

那么有没有人找到一种方法将一个运算符应用于一个协议,而协议不会作为一种类型变得无法使用?

protocols ios swift equatable

36
推荐指数
7
解决办法
2万
查看次数

TCP保证按顺序到达吗?

如果我发送两条TCP消息,我是否需要处理后者到达之前的情况?还是保证按我发送的订单到达?我假设这不是Twisted特定的例子,因为它应该符合TCP标准,但是如果熟悉Twisted的人可以为我自己的安心提供特定于Twisted的答案,那将不胜感激:-)

python tcp protocols twisted

35
推荐指数
4
解决办法
2万
查看次数

HTTPbis - bis是什么意思?

我经常看到协议版本附加了"bis"(例如v.34bis或httpbis).

"bis"是什么意思或代表什么?

我认识的一位电信工程师认为它可能源于法国.

protocols http definition

35
推荐指数
2
解决办法
5200
查看次数

使用JSONEncoder以Codable作为类型对变量进行编码

我设法让JSON和plist编码和解码都工作,但只能通过直接调用特定对象上的编码/解码函数.

例如:

struct Test: Codable {
    var someString: String?
}

let testItem = Test()
testItem.someString = "abc"

let result = try JSONEncoder().encode(testItem)
Run Code Online (Sandbox Code Playgroud)

这很好,没有问题.

但是,我试图获得一个只接受Codable协议一致性类型的函数并保存该对象.

func saveObject(_ object: Encodable, at location: String) {
    // Some code

    let data = try JSONEncoder().encode(object)

    // Some more code
}
Run Code Online (Sandbox Code Playgroud)

这会导致以下错误:

无法使用类型'(Encodable)'的参数列表调用'encode'

看看编码函数的定义,似乎它应该能够接受Encodable,除非Value是一些我不知道的奇怪类型.

open func encode<Value>(_ value: Value) throws -> Data where Value : Encodable
Run Code Online (Sandbox Code Playgroud)

serialization protocols ios swift codable

35
推荐指数
1
解决办法
9158
查看次数

如何实现网络协议?

这是一个通用的问题.我不是在寻找最好的答案,我希望你能表达你最喜欢的做法.

我想用Java实现一个网络协议(但这是一个相当普遍的问题,我在C++中面临同样的问题),这不是第一次,正如我之前所做的那样.但我认为我错过了实施它的好方法.实际上通常都是关于在主机之间交换文本消息和一些字节缓冲区,存储状态并等到下一条消息到来.问题是我通常最终得到一堆开关,并且或多或少复杂的if语句对不同的状态/消息作出反应.整件事情通常变得复杂而难以保持.更不用说有时出现的东西有一些"盲点",我的意思是协议的状态没有被覆盖并且以不可预测的方式表现.我试着写下一些状态机类,负责以或多或少的智能方式检查每个动作的开始和结束状态.这使编程协议变得非常复杂,因为我必须编写行和代码行来覆盖每种可能的情况.我喜欢的是一个好的模式,或者用于编写复杂协议的最佳实践,易于维护和扩展,并且非常易读.

你有什么建议?

c++ java protocols

34
推荐指数
2
解决办法
2万
查看次数

KVO vs NSNotification vs protocol/delegates?

虽然我有一些想法可以使用,但确切的用法仍然不清楚.有人能解释一下......?谢谢.

iphone protocols key-value-observing nsnotifications ios

34
推荐指数
2
解决办法
2万
查看次数