工作Swift代码返回“;表达式类型不明确,没有更多上下文”;当投入使用时

工作Swift代码返回“;表达式类型不明确,没有更多上下文”;当投入使用时,swift,swiftui,Swift,Swiftui,我有一段Swift代码要在整个应用程序中使用,所以我想把它放在一个函数中,该函数向切换SwiftUI工作表的@State变量返回True或False 我已经检查过代码是否在函数外部工作,但是当放入函数并调用@State变量时,它返回错误“表达式的类型在没有更多上下文的情况下是不明确的。”我无法确切地理解这个错误的含义,但我试过的每个函数都会得到它 将函数返回赋值给@State变量: self.welcome = saveProj( filename: $filename, bas

我有一段Swift代码要在整个应用程序中使用,所以我想把它放在一个函数中,该函数向切换SwiftUI工作表的@State变量返回True或False

我已经检查过代码是否在函数外部工作,但是当放入函数并调用@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
    }
    
}
func saveProj(文件名:字符串,基:字符串,目标:数组,字符串:字典)->Bool{
让路径=FileManager.default.url(对于:.documentDirectory,在:.userDomainMask中)
让name=filename+“.localproj”
让文件=路径[0]。appendingPathComponent(名称)
var output=“”
输出+=“基:”+base+“\n”
输出+=“目标:[”+目标.已加入(分隔符:“,”+“]\n”
strings.forEach{语言,翻译为
输出+=语言+“:[”
translations.forEach{string,在
输出+=字符串+”:“+翻译+”,“
}
output=String(output.dropLast())
输出+=“]\n”
}
做{
尝试output.write(to:file,atomicaly:true,encoding:String.encoding.utf8)
打印(“项目\”(名称)\“保存到内部应用程序存储。”)
返回真值
}抓住{
打印(错误。本地化描述)
返回错误
}
}

Swift中的
$
字符表示您正在传递一个
绑定
(或者更具体地说,是来自属性包装的“投影值”,如
@State
@Published


但是,您的函数采用常规(如非绑定)参数。删除呼叫站点上的
$
s,一切都会正常运行

Swift中的
$
字符意味着您正在传递一个
绑定
(或者更具体地说,从属性包装中传递一个“投影值”,如
@State
@Published


但是,您的函数采用常规(如非绑定)参数。删除调用站点上的
$
s,一切都会正常运行/

您并没有显示所有代码,但使用这些
$
符号会让人觉得您试图将绑定传递到函数中。不过,该函数接受常规(非绑定)参数。如果丢失
$
s会发生什么?答案就是解决方案!我确实在传递绑定,并且没有意识到我不应该使用$signs。非常感谢。您并没有显示所有的代码,但使用那些
$
符号会让人觉得您试图将绑定传递到函数中。不过,该函数接受常规(非绑定)参数。如果丢失
$
s会发生什么?答案就是解决方案!我确实在传递绑定,并且没有意识到我不应该使用$signs。非常感谢。