新手 swift 程式員在這里需要一些可能是微不足道的幫助......
這是在不同的檔案,不同的視圖中:
class CanvasContainerView: UIView {
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
// here are all of the calculations that lead to scoreString being calculated..
var scoreString = round(1000 * accuracyTotal / angleTotal)
}
//lots of other code
}
我需要計算出的“scoreString”的值可以在不同的檔案、不同的控制器中訪問。如果我使用 TouchesMoved 函式,如何傳遞這個值?下面是我如何嘗試在不同的檔案中實作它,但由于范圍內沒有“scoreString”而慘遭失敗:
import UIKit
class CanvasMainViewController: UIViewController {
@IBOutlet weak var ScoreText: UITextField!
/// Prepare the drawing canvas.
/// - Tag: CanvasMainViewController-viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
ScoreText.text = "\(CanvasContainerView.touchesMoved(scoreString))"
}
//lots of code
}
最后,我希望我的分數顯示在螢屏頂部:

所以我知道堆疊上已經有這樣的問題,但我的問題的具體內容是我使用了這個“touchesMoved”覆寫的函式,它不允許我回傳任何值。它大喊它需要 void 回傳型別。
我將非常感謝任何幫助。
uj5u.com熱心網友回復:
使用委托是一個好方法:
// the protocol (ie the method called by container view in the controller)
protocol CanvasContainerViewDelegate {
func scoreUpdate(fromView view:CanvasContainerView, newScore: Double)
}
class CanvasContainerView: UIView {
// the delegate that will be called
var delegate: CanvasContainerViewDelegate?
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
// here are all of the calculations that lead to scoreString being calculated..
var scoreString = round(1000 * accuracyTotal / angleTotal)
// Telling the delegate the new score value
delegate?.scoreUpdate(fromView: self, newScore: scoreString)
}
//lots of other code
}
class CanvasMainViewController: UIViewController, CanvasContainerViewDelegate {
@IBOutlet weak var ScoreText: UITextField!
@IBOutlet weak var containerView: CanvasContainerView!
/// Prepare the drawing canvas.
/// - Tag: CanvasMainViewController-viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
// set the controller as a delegate of the view
containerView.delegate = self
}
// Update the score (called by the view)
func scoreUpdate(fromView view: CanvasContainerView, newScore: Double) {
ScoreText.text = "\(newScore)"
}
//lots of code
}
uj5u.com熱心網友回復:
顯然,在檔案頂部宣告的 var 前面添加 public 解決了這個問題。感謝您參與幫助我。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/450991.html
上一篇:初始賦值后使變數不可變
