Код доступа с ошибкой TouchiD "Тип неоднозначен без дополнительного контекста"
Я использую некоторый код из github и пытаюсь конвертировать его в Swift 3.0. Я сделал все до сих пор, но я получаю эту одну ошибку на 3 строки в коде:
Тип выражения неоднозначен без дополнительного контекста
Ниже я отметил линии, помеченные этой ошибкой. Как мне исправить это? Все остальное работает, что я знаю. Я просто не могу протестировать само демо, пока это не исправлено.
//
// PasscodeSettingsViewController.swift
// PasscodeLockDemo
//
// Created by Yanko Dimitrov on 8/29/15.
// Copyright © 2015 Yanko Dimitrov. All rights reserved.
//
import UIKit
import PasscodeLock
class PasscodeSettingsViewController: UIViewController {
@IBOutlet weak var passcodeSwitch: UISwitch!
@IBOutlet weak var changePasscodeButton: UIButton!
@IBOutlet weak var testTextField: UITextField!
@IBOutlet weak var testActivityButton: UIButton!
fileprivate let configuration: PasscodeLockConfigurationType
init(configuration: PasscodeLockConfigurationType) {
self.configuration = configuration
super.init(nibName: nil, bundle: nil)
}
@IBAction func passcodeSwitchValueChange(_ sender: UISwitch) {
let passcodeVC: PasscodeLockViewController
if passcodeSwitch.isOn {
// Error on next line
passcodeVC = PasscodeLockViewController(state: .SetPasscode, configuration: configuration)
} else {
// Error on next line
passcodeVC = PasscodeLockViewController(state: .RemovePasscode, configuration: configuration)
passcodeVC.successCallback = { lock in
lock.repository.deletePasscode()
}
}
present(passcodeVC, animated: true, completion: nil)
}
@IBAction func changePasscodeButtonTap(_ sender: UIButton) {
let repo = UserDefaultsPasscodeRepository()
let config = PasscodeLockConfiguration(repository: repo)
let passcodeLock = PasscodeLockViewController(state: .ChangePasscode, configuration: config)
// Error on next line
presentViewController(passcodeLock, animated: true, completion: nil)
}
}
1 ответ
Основная ветка репо содержит предыдущую версию Swift. После автоматического преобразования (когда вы впервые клонируете проект и открываете его с помощью XCode, и XCode запрашивает преобразование в текущий синтаксис Swift), LockState
перечисление внутри PasscodeLockViewController
класс становится:
public enum LockState {
case enterPasscode
case setPasscode
case changePasscode
case removePasscode
func getState() -> PasscodeLockStateType {
switch self {
case .enterPasscode: return EnterPasscodeState()
case .setPasscode: return SetPasscodeState()
case .changePasscode: return ChangePasscodeState()
case .removePasscode: return EnterPasscodeState(allowCancellation: true)
}
}
}
В демонстрационном проекте, в котором вы создаете экземпляр, вы используете: (Здесь регистр перечисления указан в верхнем регистре как .SetPasscode
)
passcodeVC = PasscodeLockViewController(state: .SetPasscode, configuration: configuration)
Вы должны изменить эту инициализацию на:
passcodeVC = PasscodeLockViewController(state: .setPasscode, configuration: configuration)
И для других повторяющихся ошибок того же типа в XCode, вы должны изменить их соответственно.