Ios 为什么可以';我不能访问self吗?

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

我是swift新手,在返回类型方面遇到了问题。我有一个类/类型方法,它应该返回同一类的实例。据我所知,返回instancetypes不是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
  }
公共类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
元素
声明