sách gpt4 ăn đã đi

swift - 使核心数据类成为最终类以满足协议(protocol) 'Self' 要求

In lại 作者:搜寻专家 更新时间:2023-10-31 21:46:31 31 4
mua khóa gpt4 giày nike

我编写了一个协议(protocol),允许将简单链中的对象与前任和后继链接起来。

我正在尝试将此协议(protocol)与我的核心数据实体“事件”一起使用,但出现此错误:

sai lầm:

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

我也遇到了类似的问题。

Giải pháp:

查看您的代码,似乎 Chainable 将由多个 NSManagedObject 子类实现。

Sẽ Self Thay thế bằng Chainable 并让 Chainable 包含需要与 NSManagedObject< 通用的最低要求 子类。

在某些情况下,这意味着为 NSManagedObject 子类实现的一些功能实现一个包装器

关于swift - 使核心数据类成为最终类以满足协议(protocol) 'Self' 要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47540219/

31 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress