[英]Returning Array from Function (Swift)
這是我的第一個問題,請保持溫柔!
我一直在調試我的代碼並搜索 stackexchange.com 一段時間,據我所知,我的問題與從 function 返回數組有關。我可以向你保證這不是家庭作業問題,並且我試過通過 Stackoverflow 尋找解決方案,但我已經束手無策了!
ActiveModelResponseList
用於向用戶顯示可接受的響應列表,以List
形式排列:
struct ActiveModelResponseList: View {
var activeModel: ActiveModel
var body: some View {
List(activeModel.validResponses()) { /* XCode error: "Cannot convert value of type
'[ValidResponse]' to expected
argument type 'Range<Int>'" */
HStack { /* XCode error: "Contextual closure type '() -> TupleView<(Text, Text, Spacer)>'
expects 0 arguments, but 1 was used in closure body" */
Text($0.response)
Text($0.narrative)
Spacer()
}.padding(10)
}
}
}
我已經嘗試了多種不同的方法來重構上面的body
,特別是activeModel.validResponses()
導致了錯誤。 如果我刪除它並用硬編碼值填充列表,它就可以正常工作。
即function, activeModel.validResponses()
來自ActiveModel
class,如下:
class ActiveModel {
var baseModel: ModelData
private var responses: [Int]
private var activeElement: Int
// Although forThisElement is unused in the base function, ActiveModel still has
// such an element, used for other purposes
public func validResponses() -> [ValidResponse] {
return (baseModel.validResponses(forThisElement: activeElement))
}
}
反過來,這來自基礎 class, ModelData
。 請注意, forThisElement
實際上並不是這個 function 所必需的,但包含在內是為了保持多態性(即其他模型將使用它)。 如您所見, ModelData.validResponses
返回一個[ValidResponse]
class ModelData: Hashable, Codable, Identifiable {
var id: Int
var valid_response: [String]
var valid_response_narrative: [String]
public func validResponses(forThisElement: Int) -> [ValidResponse] {
// forThisElement is currently an unused input variable,
// but is required for compatibility with other classes
var thisResult: [ValidResponse] = []
for thisResponse in 0..<valid_response.count {
thisResult[thisResponse].id = thisResponse
thisResult[thisResponse].response = valid_response[thisResponse]
thisResult[thisResponse].narrative = valid_response_narrative[thisResponse]
}
return thisResult
}
}
ValidResponse
只是一個普通的結構體,定義如下:
struct ValidResponse: Identifiable, Hashable {
var id: Int = 0
var response: String = "0"
var narrative: String = "Default"
}
正在為 iPod touch(第 7 代)生成預覽,我正在使用 Xcode 版本 13.1 (13A1030d),並在 2015 年年中的 MacBook Pro 上使用 MacOS 12.0.1 進行編譯。
我在 stackexchange 上找到了以下答案,但在閱讀它們之后我覺得並沒有變得更明智(而且,由於這些答案已經過時,我想知道它們是否仍然相關):
誰能提供任何指導?
第一條錯誤消息是無稽之談。 修復第二個,它將消失。
您的問題的標題與您的實際問題無關,即您正在嘗試使用外部閉包中的位置參數。 那是行不通的; 他們不能那樣傳播。 每個新的閉包 scope 都有自己的一組位置參數,並且HStack.init
不使用任何參數,正如錯誤告訴你的那樣。
修復:命名參數。
List(activeModel.validResponses()) { response in
HStack {
Text(response.response)
Text(response.narrative)
@Jessy,澄清一下,我嘗試進行以下更改,但它也沒有奏效:
struct ActiveModelResponseList: View {
var activeModel: ActiveModel
var validResponses: [ValidResponse] = []
var body: some View {
let someResp = activeModel.validResponses()
List {
Text("\(someResp.count)")
}
}
}
但是,唉,它仍然不起作用! 它在那條let
線上崩潰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.