Ios 为什么可以';我不能访问self吗?
我是swift新手,在返回类型方面遇到了问题。我有一个类/类型方法,它应该返回同一类的实例。据我所知,返回instancetypes不是Swift的固有行为。以下是我所做工作的示例代码:Ios 为什么可以';我不能访问self吗?,ios,swift,uiview,Ios,Swift,Uiview,我是swift新手,在返回类型方面遇到了问题。我有一个类/类型方法,它应该返回同一类的实例。据我所知,返回instancetypes不是Swift的固有行为。以下是我所做工作的示例代码: public class CustomView: UIView { class func createCustomView(arguments: Array) -> Self { return createCustomViewInternal(arguments) } privat
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
}
公共类CustomView:UIView{
类func createCustomView(参数:数组)->Self{
返回createCustomViewInternal(参数)
}
私有类func createCustomViewInternal(参数:数组)->T{
将CustomView(frame:CGRectZero).createCustomViewInstance(参数)返回为!T
}
private func createCustomViewInstance(参数:数组)->Self{
//在这里做定制。
--->回归自我
}
我无法在标记点访问self。此外,如果我尝试以编程方式添加约束,则会出现编译器错误“无法将类型为“self”的值转换为预期的参数类型“AnyObject?”。我哪里出错了
在Objective-C中返回instancetype要简单得多。有没有更简单的方法返回self?所以您希望从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
}
}
旁注:
参数是具体的给定值。当你在方法中使用抽象值时,它被称为参数。为什么不仅仅是
->CustomView
?@Thilo我试图在Obj-C设计语言的行上编写一个通用方法。不管怎样,它有什么不同吗?在访问self时,我们甚至不会返回任何东西ng.我只是尝试了一下,但没有什么不同:(类函数和泛型参数的用途是什么,为什么不使用一些简单的init函数呢?Array
是泛型类型,但是您的代码缺少Array
的元素
声明