我已经在ObservableObject类中的函数中计算了一个值,现在我想在类中的另一个计算中使用返回的值。
代码如下,注意事项:-
- hole1index是从Core data中获取的数据项。
- 第一个函数(p1h1shots)工作完美,返回正确的值。
- 第二个函数(p1h1net)需要使用p1h1shots的输出来计算返回值。
- 我试图以多种方式构建第二个函数,但不断获得类似的错误信息,如"无法转换类型值"(Int16) ->显示的代码在p1h1net的返回行上有这个错误消息。
我对Swiftui比较陌生,所以可能会错过一些基本的东西,任何指示或线索将不胜感激。如果有任何额外的信息可以帮助,请告诉我。
Thanks in advance
import SwiftUI
import CoreData
class ScoreManager : ObservableObject {
@Published var player1 = ""
@Published var player2 = ""
@Published var p1handicap = 0
@Published var p2handicap = 0
@Published var p1hole1gross = 0
@Published var p1hole2gross = 0
func p1h1shots(hole1index: Int16) -> Int16 {
let hand = Int16(p1handicap)
let shot = hand - hole1index
if shot < 0 {
return Int16(0)
}
if shot < 0 {
return Int16(0)
}
if shot >= 0 && shot < 18 {
return Int16(1)
}
if shot >= 18 && shot < 36 {
return Int16(2)
}
if shot >= 36 && shot < 54 {
return Int16(3)
}
return Int16(0)
}
func p1h1net() -> Int16 {
let gross = Int16(p1hole1gross)
let shot = p1h1shots
return Int16(gross - shot)
}
}
首先,第二个if shot < 0
表达式是多余的。
如果没有括号,您将分配函数对于shot
,您必须使用参数
let shot = p1h1shots(hole1index: someInt16)
用switch
p1h1shots
func p1h1shots(hole1index: Int16) -> Int16 {
let hand = Int16(p1handicap)
let shot = hand - hole1index
switch shot {
case 0..<18: return 1 // the literal is returned as Int16
case 18..<36: return 2
case 36..<54: return 3
default: return 0
}
}
或更短的
func p1h1shots(hole1index: Int16) -> Int16 {
let hand = Int16(p1handicap)
let shot = hand - hole1index
return 0..<54 ~= shot ? shot / 18 + 1 : 0
}