如何正确地初始化()一个快速视图控制器?
Posted
技术标签:
【中文标题】如何正确地初始化()一个快速视图控制器?【英文标题】:how to init() a swift view controller properly? 【发布时间】:2019-03-28 21:53:35 【问题描述】:我正在尝试初始化这个 ViewController 类。我没有使用 MVC 设计策略,所以忽略使用的不良约定(如果有的话)。
如何正确初始化这个类?
错误:“必需”初始化程序“init(coder:)”必须由“UIViewController”的子类提供
上下文:这是一个计算器应用程序,当按下任何按钮时。它将查找发件人的标题,如果三个变量之一为 nil,它将存储在该选项中。
import UIKit
class ViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view.
@IBOutlet weak var answerLabel: UILabel!
//global vars for all funcs
var selection1: Int?
didSet answerLabel.text = String(selection1!)
var selection2: String?
didSet answerLabel.text = selection2!
var selection3: Int?
didSet answerLabel.text = String(selection3!)
var answer: Int
didSet answerLabel.text = String(answer)
init()
@IBAction func touchButton(_ sender: UIButton)
if selection1 == nil
selection1 = Int(sender.currentTitle!)
print("Selection set in first pos.")
else if selection2 == nil
selection2 = sender.currentTitle
else if selection3 == nil
selection3 = Int(sender.currentTitle!)
else
calculate(firstNum: selection1!, operation: selection2!, secondNum: selection3!)
func calculate(firstNum: Int, operation: String, secondNum: Int)
switch operation
case "+":
answer = firstNum + secondNum
case "-":
answer = firstNum - secondNum
case "x":
answer = firstNum * secondNum
case "/":
answer = firstNum / secondNum
default:
answerLabel.text = "Something went wrong!"
【问题讨论】:
因为我使用的选项可能不包含值,所以我需要以某种方式初始化类 重复 -- ***.com/questions/30679129/… 您可以通过为您的属性设置默认值来避免创建初始化。例如 var answer: Int = 0 ... 【参考方案1】:初始化取决于几个条件。
-
如果您使用故事板,您只需删除
init
,您的 VC 将拥有默认初始化程序。确保所有属性都具有默认值或者它们是可选的。
如果您使用xib
或只是以编程方式创建视图,您可以使用自定义便利初始化程序,通过这种方式传递一些额外的数据。
class MyViewController: ViewController
var answer: Int
convenience init(answer: Int)
self.init()
self.answer = answer
// Do other setup
【讨论】:
【参考方案2】:您的控制器正在从情节提要中实例化。配置初始视图的安全位置是在控制器调用viewDidLoad
期间,即:
override func viewDidLoad()
super.viewDidLoad()
// configure your views and subviews here
【讨论】:
以上是关于如何正确地初始化()一个快速视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章