放入函数时,工作 Swift 代码返回“表达式类型不明确,没有更多上下文”
Posted
技术标签:
【中文标题】放入函数时,工作 Swift 代码返回“表达式类型不明确,没有更多上下文”【英文标题】:Working Swift code returns "Type of expression is ambiguous without more context" when put in function 【发布时间】:2021-03-21 19:51:06 【问题描述】:我有一段 Swift 代码想要在整个应用程序中使用,所以我想将它放在一个函数中,该函数返回 True 或 False 给切换 SwiftUI 工作表的 @State 变量。
我已经检查过代码在函数之外是否可以工作,但是当放入函数并调用@State 变量时,它会返回错误“表达式类型不明确,没有更多上下文。”我无法弄清楚这个错误的确切含义,但我尝试过的每个功能都得到了它。
给@State变量赋值函数返回:
self.welcome = saveProj(
filename: $filename,
base: $base,
targets: $targets,
strings: $strings
)
声明函数:
func saveProj(filename: String, base: String, targets: Array<String>, strings: Dictionary<String,Dictionary<String,String>>) -> Bool
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let name = filename + ".localproj"
let file = paths[0].appendingPathComponent(name)
var output = ""
output += "base: " + base + "\n"
output += "targets: [" + targets.joined(separator:",") + "]\n"
strings.forEach language, translations in
output += language + ": ["
translations.forEach string, translation in
output += string + ":" + translation + ","
output = String(output.dropLast())
output += "]\n"
do
try output.write(to: file, atomically: true, encoding: String.Encoding.utf8)
print("Project \"\(name)\" saved to internal application storage.")
return true
catch
print(error.localizedDescription)
return false
【问题讨论】:
您没有显示所有代码,但使用这些$
符号会使您看起来正在尝试将绑定传递给函数。但是,该函数采用常规(非绑定)参数。如果您丢失了$
s,会发生什么?
您的答案就是解决方案!我确实在传递绑定,但没有意识到我不应该使用 $ 符号。谢谢!
【参考方案1】:
Swift 中的$
字符表示您正在传递Binding
(或者,更具体地说,是来自@State
或@Published
等属性包装器的“投影值”)。
但是,您的函数采用常规(例如非绑定)参数。在您的呼叫站点删除$
s,一切都会正常/
【讨论】:
以上是关于放入函数时,工作 Swift 代码返回“表达式类型不明确,没有更多上下文”的主要内容,如果未能解决你的问题,请参考以下文章
Swift 2 - 使用 Alamofire 时函数不返回 Bool
Swift:IBAction 在单击按钮后将图像放入 UIImageView