Не уверен, как правильно установить мои переменные для существующего кода. Неустранимая ошибка: неожиданно обнаружен ноль при неявном развертывании необязательного значения - PullRequest
1 голос
/ 06 февраля 2020

В настоящее время я пытаюсь запустить функцию из отдельного класса в viewcontrollers viewdidload (). Предыдущая команда разработчиков написала код, и я изо всех сил пытаюсь заставить его работать, поскольку я также очень новичок в Swift.

Я не включил все функции, так как они очень длинные, но мне просто интересно, могу ли я получить какой-нибудь совет, я получаю сообщение об ошибке «Неустранимая ошибка: неожиданно обнаружил ноль при неявном развертывании необязательного значения» для значений shapelayer Я знаю, что это потому, что они не были инициализированы, но я изо всех сил пытаюсь выяснить, как правильно установить переменные, не путая весь код, просто надеясь на некоторое руководство.

Я уверен, что мне, вероятно, нужно объяснить больше, но есть много кода и я смотрел на него весь день, дайте мне знать, если мне нужно больше загружать.

class TraceViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

  @IBOutlet weak var canvasView: CanvasView!
  static var curLetter = "A"

  override func viewDidLoad() {
    canvasView.letter = TraceViewController.curLetter
    canvasView.clearCanvas()
  }
}

Класс :

class CanvasView:UIView { 
  var lineColour:UIColor!
  var lineWidth:CGFloat!
  var path:UIBezierPath!
  var touchPoint:CGPoint!
  var startingPoint:CGPoint!

  var initialPoint:CGPoint!

  var stroke1Done = false
  var stroke2Done = false
  var stroke3Done = false
  var stroke4Done = false
  var stroke5Done = false
  var stroke6Done = false
  var stroke7Done = false

 //Track current stroke and add all the shape layers into an array
  var currentStroke = 1
  var strokesArray = [CAShapeLayer]()

func drawShapeLayer() {
    let shapeLayer = CAShapeLayer()
    shapeLayer.path = path.cgPath //error here
    shapeLayer.strokeColor = lineColour.cgColor
    shapeLayer.lineWidth = lineWidth
    shapeLayer.fillColor = UIColor.clear.cgColor
    self.layer.addSublayer(shapeLayer)

    //Add the shapes in array so that we can track it
    self.strokesArray.append(shapeLayer)

    self.setNeedsLayout()
}

func clearCanvas() {
    guard path != nil else {return}
    path.removeAllPoints()
    self.layer.sublayers = nil
    self.setNeedsDisplay()
    print("Hello")
    stroke1Done = false
    stroke2Done = false
    stroke3Done = false
    stroke4Done = false
    stroke5Done = false
    stroke6Done = false
    stroke7Done = false

    goNext = false

    updateStrokePoints()

    updateStrokeDifference()

    currentStroke = 1
 }
}

1 Ответ

2 голосов
/ 06 февраля 2020

Ошибка возникает из-за того, что вы не указали путь перед его использованием. Вам нужно установить path перед тем, как вызывать его.

сначала:

var path: UIBezierPath?

затем:

path = UIBezierPath()

и, наконец, используйте его:

shapeLayer.path = path?.cgPath

Кроме того, не забудьте использовать ? вместо ! принудительная распаковка всегда плохая практика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...