无法将字符串的数组数组赋值给FilesTableViewController类属性,报错求助
解决Expression type '()' is ambiguous without more context错误
咱们先拆解下问题根源:
你的FilesTableViewController里的files属性类型是[[String]]?——也就是可选的「字符串数组」的数组,但你在prepareForSegue里创建的files变量类型是[[String]?]——这是**「可选字符串数组」的数组**,两者类型完全不匹配,Swift编译器没法推断出正确的赋值逻辑,所以抛出了歧义错误。
修复方案
你需要把textFiles和jpgFiles这两个可选的字符串数组,转换成确定的字符串数组(处理掉nil的情况),再组成符合要求的数组:
// 处理可选值:如果方法返回nil就用空数组替代,保证类型为[String] let textFiles: [String] = FileManager.default.getSortedFilesAtDocumentDirectoryWith(fileExtension: "txt", withFileExtension: true) ?? [] let jpgFiles: [String] = FileManager.default.getSortedFilesAtDocumentDirectoryWith(fileExtension: "jpg", withFileExtension: true) ?? [] // 此时files的类型为[[String]],和目标属性类型匹配 let files = [textFiles, jpgFiles] // 用可选绑定替代强制解包,避免类型转换失败导致崩溃 if let filesTVC = segue.destination as? FilesTableViewController { filesTVC.files = files }
额外优化建议
- 永远避免使用强制解包
!,改用if let或guard let做可选绑定,这是Swift里保证代码安全的基础操作。 - 如果你的
getSortedFilesAtDocumentDirectoryWith方法在找不到对应文件时确实会返回nil,用?? []把nil转换成空数组是合理的——用空数组表示「无数据」比用nil更符合列表展示的逻辑,也能避免后续处理多层可选值的麻烦。
如果你确实需要保留可选层级(比如允许整个files属性为nil,或者允许某一组文件为nil),那你需要把FilesTableViewController的files属性类型调整为[[String]?]?,但这种设计通常不如直接用空数组清晰。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

