- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我编写了一个协议(protocol),允许将简单链中的对象与前任和后继链接起来。
我正在尝试将此协议(protocol)与我的核心数据实体“事件”一起使用,但出现此错误:
Protocol 'Chainable' requirement 'chain' cannot be satisfied by a non-final class ('Event') because it uses 'Self' in a non-parameter, non-result type position.
我怎样才能让这个类cuối cùng
(我不想将 Codegen 设置为手动),或者重写 var 链: [Self]
定义?
提前谢谢你。
extension Event: Chainable {}
protocol Chainable where Self: NSManagedObject {
var chain: [Self] { get }
var predecessor: Self? { get set }
var successor: Self? { get set }
var selfIndexInChain: Int { get }
mutating func moveInChain(to index: Int)
mutating func removeSelfFromChain()
mutating func addSelfAsSuccessor(of object: Self)
mutating func addSelfAsPredecessor(of object: Self)
}
extension Chainable {
var chain: [Self] {
var _chain: [Self] = [self]
// go right
var current: Self = self
while let successor = current.successor {
_chain.append(successor)
current = successor
}
// go left
current = self
while let predecessor = current.predecessor {
_chain.insert(predecessor, at: 0)
current = predecessor
}
// TODO: - Compare speed with the alternative realization: Find the first element, then populate the tasks array.
return _chain
}
// Self Index in the chain
var selfIndexInChain: Int { return self.chain.index(of: self)! }
// Change place in the cahain
mutating func moveInChain(to index: Int) {
guard index != selfIndexInChain else { return } // Check the index isn't same
guard 0...(chain.count-1) ~= index else { return }
let taskAtDestination = chain[index]
if index > selfIndexInChain {
removeSelfFromChain()
addSelfAsSuccessor(of: taskAtDestination)
} khác {
removeSelfFromChain()
addSelfAsPredecessor(of: taskAtDestination)
}
}
mutating func removeSelfFromChain() {
let successor = self.successor
let predecessor = self.predecessor
self.predecessor = nil
self.successor = nil
self.predecessor?.successor = successor
self.successor?.predecessor = predecessor
}
mutating func insertSelfBetween(lhs: Self, rhs: Self) {
// self shouldn't be linked
guard self.predecessor == nil && self.successor == nil else { return }
guard (lhs.successor == rhs && rhs.predecessor == lhs) ||
(lhs.successor == nil && rhs.predecessor == nil ) else { return } // If both are nil, they will be connected thru self
self.predecessor = lhs
self.successor = rhs
}
mutating func addSelfAsSuccessor(of object: Self) {
// self shouldn't be linked
guard self.predecessor == nil && self.successor == nil else { return } // TODO: Add error support
// self shouldn't be already the successor
guard object.successor != self else { return }
let previousSuccessor = object.successor
self.predecessor = object
self.successor = previousSuccessor
}
mutating func addSelfAsPredecessor(of object: Self) {
// self shouldn't be linked
guard self.predecessor == nil && self.successor == nil else { return }
// self shouldn't be the task successor already
guard object.predecessor != self else { return }
let previousPredecessor = object.predecessor
self.successor = object
self.predecessor = previousPredecessor
}
}
câu trả lời hay nhất
我也遇到了类似的问题。
查看您的代码,似乎 Chainable
将由多个 NSManagedObject
子类实现。
Sẽ Self
Thay thế bằng Chainable
并让 Chainable
包含需要与 NSManagedObject< 通用的最低要求
子类。
在某些情况下,这意味着为 NSManagedObject
子类实现的一些功能实现一个包装器
关于swift - 使核心数据类成为最终类以满足协议(protocol) 'Self' 要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47540219/
我可以看到有状态的协议(protocol)可以减少像 cookie 这样的“模拟状态”。 但是测试变得更加难以确保您的实现正确并重新连接,并且 session 继续可能很难处理。 始终使用无状态协议(
我正在尝试为我的下一个分布式应用程序找到合适的协议(protocol)中间件。在过去的几天里,我找到了几个规范,想知道我是否错过了一个重要的规范?它应该是二进制协议(protocol),支持 RPC,
我正在做一个研究生院软件工程项目,我正在寻找管理 ATM 和银行网络之间通信的协议(protocol)。 我已经在谷歌上搜索了很长一段时间,虽然我找到了各种有关 ATM 的有趣信息,但我惊讶地发现似乎
我正在开发一个 ECG 模块,它以字节为单位给出数据。有一个关于它的协议(protocol)文档解释了如何构建从模块中出来的数据包。我想解码该数据。我很困惑 Protocol Buffer 是否会对此
đóng cửa. Câu hỏi này không tuân thủ các nguyên tắc của Stack Overflow. Hiện tại nó không chấp nhận câu trả lời. Bạn muốn cải thiện câu hỏi này? Đã cập nhật câu hỏi theo chủ đề cho Stack Overflow. Đóng cửa 3 năm trước. Cải thiện câu hỏi này
我需要在我的程序中包含基本的文件发送和文件接收例程,并且需要通过 ZMODEM 协议(protocol)。问题是我无法理解规范。 供引用,here is the specification . 规范没
我最近听到这个术语来描述 Google 的新环聊协议(protocol)和 Whisper System 的新 encrypted texting app . The new TextSecure p
如何检查某个对象是否符合协议(protocol)? 我试过这种方式,但出现错误: if lCell.conformsToProtocol(ContentProtocol) { } 最佳
在应用程序中,我们有两种类型的贴纸,字符串和位图。每个贴纸包都可以包含两种类型。这就是我声明模型的方式: // Mark: - Models protocol Sticker: Codable { }
这个问题在这里已经有了答案: Why can't a get-only property requirement in a protocol be satisfied by a property w
我有以下快速代码: protocol Animal { var name: String { get } } struct Bird: Animal { var name: String
我在遵循继承树的几个类中分配协议(protocol)。像这样: 头等舱 @protocol LevelOne - (void) functionA @end @interface BaseClass
我们之前使用的是 fix,但客户说使用 OUCH 进行交易,因为这样速度更快。我在互联网上查了一下,消息看起来很相似。它如何获得速度优势。请给我一些示例消息 最佳答案 基本上,FIX 消息以文本格式传
在我的 swift 项目中,我有一个使用协议(protocol)继承的案例,如下所示 protocol A : class{ } protocol B : A{ } 接下来我要实现的目标是声明另一个具
我想根据这两种协议(protocol)的一般特征(例如开销(数据包)、安全性、信息建模和可靠性)来比较 OPC UA 和 MQTT。我在哪里可以找到每个协议(protocol)的开销和其他特性的一些示
本质上,我的最终目标是拥有一个协议(protocol) Log,它强制所有符合它的对象都有一个符合另一个协议(protocol) [LogEvent] 的对象数组. 但是,符合Log的类需要有特定类型
我正在尝试为基于左操作数和右操作数标识的协议(protocol)实现 Equatable 协议(protocol)。换句话说:我如何为一个协议(protocol)实现 Equatable 协议(pro
问题不在于编程。 我正在使用一台旧机器,微软停止了这些机器的补丁。 有没有人针对攻击者已知的使用端口 445 的 SMB 协议(protocol)漏洞的解决方案? 任何棘手的解决方案? 换句话说,我想
在我们的业务中,我们需要记录到达我们服务器的每个请求/响应。 目前,我们使用 xml 作为标准实现。 如果我们需要调试/跟踪某些错误,则使用日志文件。 如果我们切换到 Protocol Buffer
你推荐什么协议(protocol)定义? 我评估了 Google 的 Protocol Buffer ,但它不允许我控制正在构建的数据包中字段的位置。我认为 Thrift 也是如此。我的要求是: 指定
Tôi là một lập trình viên xuất sắc, rất giỏi!