相关疑难解决方法(0)

swift子类*总是*必须调用super.init()

如果我有一个swift子类:

  1. 不需要访问 self
  2. 不需要访问任何属性 self

我还需要调用super.init()子类的init()方法吗?

*注意:由于上面1和2中列出的细节,这个问题与SO上提出并回答的问题不同.

inheritance swift

28
推荐指数
3
解决办法
1万
查看次数

Swift中的惰性属性初始化

你将如何在Swift中实现以下模式?

所述Container类被初始化,其中包含的词典JSON数组.这些词典用于初始化Entry类.但是,Entry当访问entriessearchEntries访问属性时,对象的初始化会延迟发生.

@interface Container

@property (readonly, nonatomic) NSArray *entryDicts;

@property (readonly, nonatomic) NSArray* entries;
@property (readonly, nonatomic) NSDictionary *searchEntries;

@end



@implementation Container

- (instancetype)initWithArray:(NSArray *)array
{
    self = [super init];
    if (self) {
        _entryDicts = array;
    }
    return self;
}

@synthesize entries = _entries;
- (NSArray *)entries
{
    [self loadEntriesIfNeeded];
    return _entries;
}

@synthesize entriesByNumber = _entriesByNumber;
- (NSDictionary *)entriesByNumber
{
    [self loadEntriesIfNeeded];
    return _entriesByNumber;
}

- (void)loadEntriesIfNeeded
{
    if …
Run Code Online (Sandbox Code Playgroud)

swift

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

Swift类中的错误:在super.init调用中未初始化的属性 - 如何在其初始化参数中初始化需要使用self的属性

我正在重写UITableViewControllerswift,其中我有两个必需的变量,这些变量通过使用weak引用来初始化,self因为这些变量用于实现UITableViewDataSource协议并需要self引用以使用其tableView属性

class VideosListViewController: UITableViewController {

  required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.datasourceOfflineVideos = ASDataSource(tableViewController: self)
    self.datasourceOnlineVideos = ASDataSource(tableViewController: self)
  }

  // MARK: - Variables
  var datasourceOnlineVideos:ASDataSource
  var datasourceOfflineVideos:ASDataSource
  }
Run Code Online (Sandbox Code Playgroud)

现在的问题是因为它给出了我Property not initialized at super.init call预期的错误,如下所述:Swift类中的错误:属性未在super.init调用时初始化.

Swift的编译器执行四个有用的安全检查,以确保完成两阶段初始化而没有错误

安全检查1指定的初始化程序必须确保在委托最高级初始化程序之前初始化其类引入的所有属性.

摘录自:Apple Inc."The Swift Programming Language."iBooks.https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11

所以我的问题是:

如果swift类中的实例变量需要self引用像ASDataSource类型变量一样初始化,我该怎么做?

由于swift不允许我调用super.init()之前初始化所有实例变量而且也不允许我在调用之前self在初始化程序中使用init()super.init()

目前我正在使用可选变量来解决问题.但出于学习目的,我想知道如何做到这一点.提前致谢 :)

compiler-errors initialization properties ios swift

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

属性'self.title'未在swift中的super.init调用中初始化

我有一个派生自UIView的类,但我初始化它总是显示错误说"属性'self.title'未在swift中的super.init调用中初始化"

这是我的代码

class A: UIView
{

var title : String
var recordUrl : String
var content : String

required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }

init(frame :  CGRect ,title : String, recordUrl : String  , content : String)
{
    super.init(frame: frame)

    self.title = title
    self.recordUrl = recordUrl
    self.content = content
}
}
Run Code Online (Sandbox Code Playgroud)

initialization uikit ios swift

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

Swift:为什么我不能从override init调用方法?

我有以下代码示例(来自PlayGround):

class Serializable : NSObject{
override init() { }
}

class Device : Serializable{

    var uuid:String

    override init() {

        println("init ")

        self.uuid = "XXX"

       self.uuid = Device.createUUID()

        println(self.uuid)

    }

   class func createUUID() -> String{
       return "XXX2"
    }
}


var device = Device()
Run Code Online (Sandbox Code Playgroud)

您可以注意到我将createUUID方法实现为静态.

但为什么我init不能以静态方式调用此方法?:

class Serializable : NSObject{
override init() { }
}

class Device : Serializable{

    var uuid:String

    override init() {

        // tried
        // super.init()

        println("init ")

        self.uuid = "XXX"

       self.uuid = self.createUUID() //  ERROR …
Run Code Online (Sandbox Code Playgroud)

swift

5
推荐指数
3
解决办法
8664
查看次数

用 swift 参数初始化一个类

我正在尝试用 Swift 中的参数初始化一个类。我希望能够将数组传递给类。类似的东西let test = MyTestClass(data)

代码:

init(data: [CGFloat]){
    super.init(nibName: "Test", bundle: nil)
    self.data = data
}

required init?(coder decoder: NSCoder) {

    super.init(nibName: "Test", bundle: nil)
}
Run Code Online (Sandbox Code Playgroud)

错误:

在此处输入图片说明

initialization swift

3
推荐指数
1
解决办法
5850
查看次数