我是swift的新手,我遇到了返回类型的问题。我有一个类/类型方法,它应该返回同一个类的实例。据我所知,返回实例类型不是本机Swift行为。以下是我所做的示例代码:
public class CustomView: UIView {
class func createCustomView(arguments: Array) -> Self {
return createCustomViewInternal(arguments)
}
private class func createCustomViewInternal<T>(arguments: Array) -> T {
return CustomView(frame: CGRectZero).createCustomViewInstance(arguments) as! T
}
private func createCustomViewInstance(arguments: Array) -> Self {
//Do customization here.
---> return self
}
我无法在标记点访问自己。此外,如果我尝试以编程方式添加约束,我会收到编译器错误“无法将类型'Self'的值转换为期望的参数类型'AnyObject?'”。我哪里出错了?
在Objective-C中返回instancetype会更简单。有没有更简单的方法来回归自我?
答案 0 :(得分:1)
所以你想从UIView中继承。
您可以使用具体类而不是Self。当您不想覆盖时,Self仅与子类相关。 使用CustomView代替Self可以让很多事情变得更轻松。
您可以使用一种类方法而不是两种方法。
您可以覆盖init方法,而不是此自定义方法。
但如果您真的需要这样,那么这是一个有效的解决方案:
import UIKit
public class CustomView: UIView {
public var property: Int = 0
public required override init(frame: CGRect) {
super.init(frame: CGRectZero)
}
required public init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
public class func createCustomView(param: Int) -> Self {
return createCustomViewInternal(param)
}
private class func createCustomViewInternal(param: Int) -> Self {
return self.init(frame: CGRectZero).createCustomViewInstance(param)
}
private func createCustomViewInstance(param: Int) -> Self {
self.property = param
return self
}
}
旁注:
参数是具体的给定值。在方法中使用抽象值时,它称为参数。