SWIFT:静态方法中的协议功能在“自我”上不可见
我有一个要解决的问题。SWIFT:静态方法中的协议功能在“自我”上不可见
这是需要作的工作的代码:
class A: NSObject, RowConvertible {
/// Initializes a record from `row`.
///
/// For performance reasons, the row argument may be reused during the
/// iteration of a fetch query. If you want to keep the row for later use,
/// make sure to store a copy: `self.row = row.copy()`.
public required init(row: Row) {
print(row)
}
}
extension A
{
public static func currentUser() -> Self?
{
// By key
let userType = type(of:self)
let user = try! dbQueue.inDatabase { db in
try self.fetchOne(db, "SELECT * FROM User")
}
return user
}
}
class B: A
{
}
let user = B.currentUser()
print(user)
RowConvertible
是含有fetchOne()
方法的协议。
RowConvertible
是GRDB.swift开源库的一部分:
public protocol RowConvertible {
public static func fetchOne(_ db: Database, _ sql: String)
}
所以问题是,当我试图调用fetchOne()
自我静态方法,我得到错误:
Type 'Self' has no member
fetchOne
but when I'm calling it onA
orB
classes it's OK.
所以我需要保持它的动态,并在自我调用该方法。
毕竟,如果这项工作,我还需要将返回的值转换为Self类型。
在此先感谢
Gegham
protocol PrintProtocolTest {
static func printTest()
}
extension PrintProtocolTest {
static func printTest() {
print(self)
}
}
class A: PrintProtocolTest {
}
extension A {
static func test() {
self.printTest()
}
}
class B: A
{
}
B.test() /// <--- print 'B' here
你可以得到的结果
B
你的代码是正确的。使用self
即可。
有了回报
protocol PrintProtocolTest {
static func printTest()
}
extension PrintProtocolTest {
static func printTest() {
print(self)
}
}
class A: PrintProtocolTest {
required init() {
}
}
extension A {
static func test() -> PrintProtocolTest {
self.printTest()
return self.init()
}
}
class B: A
{
}
B.test() // <--- return B instance here
感谢您的帮助,理解它为什么不起作用真的很有帮助,但问题仍然存在。 当我在静态函数'加入返回类型 - >自','self.printTest()'不工作 @anhtu –
@GeghamHarutyunyan我编辑我的答案,你可以用返回b – anhtu
谢谢很多! –
能否请您发表您的'RowConvertible'代码?请注意,错误出现在哪里以及哪里没有问题。 – anhtu
我编辑了我的问题,请看看。当我尝试在自我上调用fetchOne()时出现错误,当我在“A”或“B”类上调用它时没关系 –
是否有一个特别原因,您不想尝试使用A.fetchOne (db,“SELECT * FROM User”)'? “所以我需要保持它的动态,并且自我调用这个方法。”不知道你是什么意思,如果你打电话给它它应该总是在任何sublcasses – Fonix