相关疑难解决方法(0)

SW的Swift协议扩展自引用问题

我正在寻找一种通过协议扩展为协议添加默认初始化程序的方法.

我的协议是:

protocol TestProtocol {
    var myVar : Double { get set }
    init(value: Double)
    init(existingStruct : TestProtocol)
}
Run Code Online (Sandbox Code Playgroud)

我使用这个协议实现了一个结构:

struct TestStruct : TestProtocol {
    var myVar : Double

    init(value : Double) {
        myVar = value
    }

    init (existingStruct : TestProtocol) {
        myVar = existingStruct.myVar
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试通过扩展来为此协议创建默认初始化程序,我会遇到自我问题:

extension TestProtocol {
    init(value : Double) {
        myVar = value
    }

    init(existingStruct : TestProtocol) {
        myVar = existingStruct.myVar
    }
}
Run Code Online (Sandbox Code Playgroud)

两个赋值行在初始化之前发出错误 变量'self'通过引用传递

有没有办法让这项工作 - 或者我只限于使用课程?

在此输入图像描述

protocols ios swift

13
推荐指数
1
解决办法
7053
查看次数

创建通用单例

这对我来说有点头脑(对我来说).基本上我想要从同一个类继承2个不同的单身.在任何一个我想要使用某个本身派生的类.所以我有Utility和两个AUtil:UtilityBUtil:Utility.和Singleton被用作ASingleton使用AUtility在其胃和B分别.我在所有边界都失败了.最后的尝试是一个工厂模式,简单地将Swift 1.2送到了Segfault:

protocol Initializable { init() }
class A:Initializable {
  var x = "A"
  required init() {}
}
class B:Initializable {
  var x = "B"
  required init() {}
}

class C {
  let t:Initializable
  init(t:Initializable) {
    self.t = t
    println(t)
  }
  func factory() {
    println(t.dynamicType())
  }
}
Run Code Online (Sandbox Code Playgroud)

如上所述,我也尝试将以下模式设为通用:

private let _SingletonSharedInstance = StaticClass()

class StaticClass {
  class var sharedInstance : StaticClass {
    return _SingletonSharedInstance
  }
} …
Run Code Online (Sandbox Code Playgroud)

generics singleton factory swift

6
推荐指数
1
解决办法
3168
查看次数

标签 统计

swift ×2

factory ×1

generics ×1

ios ×1

protocols ×1

singleton ×1