相关疑难解决方法(0)

为什么Swift中甚至需要方便关键字?

由于Swift支持方法和初始化程序重载,因此您可以将多个init并排放在一起,并使用您认为方便的方法:

class Person {
    var name:String

    init(name: String) {
        self.name = name
    }

    init() {
        self.name = "John"
    }
}
Run Code Online (Sandbox Code Playgroud)

那么convenience关键字为什么会存在呢?是什么让以下更好?

class Person {
    var name:String

    init(name: String) {
        self.name = name
    }

    convenience init() {
        self.init(name: "John")
    }
}
Run Code Online (Sandbox Code Playgroud)

initialization swift

122
推荐指数
3
解决办法
2万
查看次数

什么是Swift中需要的初始化程序?

我在这个答案中看到用户指定了一个convenience required init().这到底是什么意思?

我知道该required关键字用于覆盖超类的指定初始值设定项,但convenience required声明的做法是什么?

initialization swift

14
推荐指数
1
解决办法
6611
查看次数

在ios 8 beta 5中是否损坏了带有nib文件的视图控制器?

我在ios 8 beta 4中创建了一个测试项目,它作为主视图控制器和第二个视图控制器创建为带有xib文件的UIViewController子类.

我在主控制器上放了一个按钮来显示第二个控制器:

class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

@IBAction func testVCBtnTapped() {
    let vc = TestVC()
    presentViewController(vc, animated: true, completion: nil)
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
Run Code Online (Sandbox Code Playgroud)

}

我运行应用程序并按下按钮显示第二个控制器 - 一切都很好

转到xcode beta 5,我运行应用程序,当我按下按钮时,屏幕变黑.

因为我知道他们搞砸了init代码,所以我尝试使用覆盖来查看它会修复它:

class TestVC: UIViewController {

override init() {
    super.init()
}
required init(coder aDecoder: NSCoder!) {
    super.init(coder: …
Run Code Online (Sandbox Code Playgroud)

xcode ios

12
推荐指数
1
解决办法
6536
查看次数

Swift do子类继承初始化器?

我有以下代码:

class Parent {

    var foo: Int

    init(someNum: Int) {
        self.foo = someNum
    }
}

class Child: Parent {

}

var parent = Parent(someNum: 999)
println(parent.foo)                  // prints "999"

var child = Child(someNum: 3872)   
println(child.foo)                   // prints "3872"
Run Code Online (Sandbox Code Playgroud)

在Apple的2014 WWDC"Intermediate Swift"视频中,他说默认情况下不会继承初始值设定项,除非它的存储属性有默认值.但是foo,子类中没有默认值,Child但它明确地继承了该init(someNum:)方法.我理解错误的解释还是还有其他事情发生?

inheritance ios swift

5
推荐指数
1
解决办法
6708
查看次数

Swift - XCode6 beta5需要每个类的init(编码器)

在最新的XCode 6 beta(5)中,我注意到我的应用程序中几乎每个类都抱怨错误:

Class does not implement its superclass's required members

例如:

import UIKit

let _sharedAPIManager = APIManager(baseURL: NSURL.URLWithString(API_URL))

class APIManager: AFHTTPSessionManager {

class var sharedInstance : APIManager {
    return _sharedAPIManager
}

// this fixes compiler error but why it should be here?
required init(coder aDecoder: NSCoder!) {
    super.init(coder: aDecoder)
}

override init() {
    super.init()
}

override init(baseURL url: NSURL!) {
    super.init(baseURL: url)

    self.responseSerializer = AFJSONResponseSerializer()
    self.requestSerializer = AFJSONRequestSerializer()

    self.requestSerializer.setValue(API_KEY, forHTTPHeaderField: "X-Api-Key")
    self.requestSerializer.setValue("3", forHTTPHeaderField: "X-Api-Version")
}

override init(baseURL url: NSURL!, …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift xcode6 ios8

4
推荐指数
2
解决办法
8182
查看次数

UIView初始化程序swift Xcode 6 beta 5

xcode 6 beta 5

错误:

类'ClassName'不实现其超类的必需成员

    class ClassName:UIView
Run Code Online (Sandbox Code Playgroud)

也显示错误

        init(frame: CGRect) {
            super.init(frame: frame)
            // Initialization code
            self.backgroundColor = UIColor.clearColor()
        }
Run Code Online (Sandbox Code Playgroud)

覆盖声明需要'ovveride'关键字

我在init之前放置了覆盖,删除了ovveride错误但是没有超类错误

提前致谢

ios swift xcode6

2
推荐指数
1
解决办法
4331
查看次数

呼叫中参数“编码器”的参数丢失

我已经将自定义UIButton编码为:

 class AccountOpeningButton: UIButton {
  required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        ......
   }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用我的故事板成功实例化该类。现在,我做了一个UIView并想在我的UIView中添加此按钮为:

var customView:UIView = UIView()
customView.frame = CGRect(x: 0, y: 0, width: 350, height: 250)
.....
let fromDateBtn:UIButton = AccountOpeningButton()//Error comes here as  : Missing Argument for parameter ‘coder’ in call
customView.addSubview(fromDateBtn)
Run Code Online (Sandbox Code Playgroud)

因此,也请帮助动态地重用此代码。

PS:我提到了http://napora.org/nscoder-and-swift-initialization/ 致命错误:对类 Class 使用未实现的初始化器“ init(coder :)” 无法实现其超类的必需成员 ,但未成功。

================================================== ==================== 尝试

let fromDateBtn:UIButton = UIButton() as! AccountOpeningButton
Run Code Online (Sandbox Code Playgroud)

这将引发CastException 无法将类型为'UIButton'的值转换为'.AccountOpeningButton'

iphone uibutton uiview ios swift

2
推荐指数
1
解决办法
5433
查看次数

initWithNibName没有实现超类 - Swift

我正在尝试实现Objective-C equiv.下面用nib调用视图控制器时.

目标C:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.modalPresentationStyle = UIModalPresentationCustom;
        self.transitioningDelegate = self;
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止迅速的地方:

override init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

    self.modalPresentationStyle = UIModalPresentationStyle.Custom
    self.transitioningDelegate = self
}
Run Code Online (Sandbox Code Playgroud)

但是我一直收到这个错误:

Class "ViewController" does not implement its superclass's required members
Run Code Online (Sandbox Code Playgroud)

我以为上面的init方法是否需要成员?

编辑 - 进入下面的更多细节: 类不实现其超类的必需成员

objective-c init ios swift

0
推荐指数
1
解决办法
5963
查看次数