- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
请帮助我使用 Swift,我需要可以继承的单例。我可以这样做
class A {
var defaultPort: Int
required init() {
self.defaultPort = 404
}
class var defaultClient: A {
struct Static {
static var onceToken: dispatch_once_t = 0
static var instance: A? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = self.init()
}
return Static.instance!
}
}
但是在swift 2.0中我们可以这样做
static let defaultClient = A() //self.init()
但它以任何方式创建类 A 的实例。我如何使用这样的 self.init()
static let defaultClient = self.init()
为了能够继承
UPD目前最好的方法
class A {
class func defaultClient() -> Self {
struct Static {
static var onceToken: dispatch_once_t = 0
static var instance: A? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = self.init()
}
return instance(Static.instance, asType: self)
}
}
这里我们需要帮助
func instance<T>(instance: Any, asType type: T.Type) -> T {
let reurnValue = instance as! T
return reurnValue
}
因为目前还不存在将 A 转换为 Self 的另一种方法。
p.s. crazy swift way! why i can not do instance as! Self
最佳答案
你的问题不是很清楚。您正在寻找类似于 this answer 中发布的类常量解决方案之类的东西,但它会自动使用“我自己的类”,而不是显式创建特定类的实例……对吗?
也就是说,你想把这个:
class Singleton {
static let sharedInstance = Singleton()
}
进入这个:
class Singleton {
static let sharedInstance = SomeMagicThing()
}
class SingletonSubclass {}
当你调用 Singleton.sharedInstance
时,SomeMagicThing
会自动创建一个 Singleton
实例,而当你调用 SingletonSubclass
实例时你调用 SingletonSubclass.sharedInstance
。正确吗?
部分问题是 static
和 class
意味着两个不同的东西。 static
修饰符意味着它修改的声明仅与特定类型声明相关联。因此,Singleton
类型拥有一个指向特定对象的指针——它的子类不继承该指针。 (如果他们这样做了,它会指向同一个对象还是特定于子类的对象?)
如果您可以创建一个 class var
或 class let
,那(理论上)会为您提供所需的调度/继承。但是尝试这样做会给你一个错误(强调我的):
class stored properties not yet supported in classes; did you mean
static
?
所以听起来这种事情总有一天会出现。
当然,问题的另一面是找到一种方法来动态引用负责执行某些语句的“当前”类型。在实例方法的上下文中,您可以使用 self.dynamicType
来处理这些事情……但是没有类的等价物。 (Self
是一种类型约束,而不是实际类型。)这是 Swift 中的类型系统的副作用,它比 Objective-C 的类型系统更加严格和静态(例如,元类型不是它只是普通物体的特殊 flavor )。 File a bug如果您想看到这种效果的变化?
关于ios - Swift 2.0 一行中的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33445455/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!