放入函数时,工作 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 Firebase

Swift:IBAction 在单击按钮后将图像放入 UIImageView

如何将 AppDelegate Swift 代码放入 Objective-C AppDelegate 文件并使其工作?

Swift 错误:表达式类型不明确,没有更多上下文

模棱两可的表达式类型错误(Swift 2)