在Xcode上构建iOS应用时Swift编译器出错

mznpcxlj  于 2023-08-07  发布在  iOS
关注(0)|答案(2)|浏览(221)

首先,我使用的是xcode版本13.2.1,当我试图在terminal / xcode中构建我的ios应用程序时,我遇到了一个问题,下面是错误响应:
x1c 0d1x的数据
/Users/user/.pubcache/hosted/pub.dev/shared_preferences_foundation-2.3.0/ios/Classes/SharedPreferencesPlugin.swift:58:22:条件中的变量绑定需要初始化器
下面是获取错误的完整函数:

func getAllPrefs(prefix: String, allowList: [String]?) -> [String: Any] {
    var filteredPrefs: [String: Any] = [:]
    var allowSet: Set<String>?;
    if let allowList {
      allowSet = Set(allowList)
    }
    if let appDomain = Bundle.main.bundleIdentifier,
      let prefs = UserDefaults.standard.persistentDomain(forName: appDomain)
    {
      for (key, value) in prefs where (key.hasPrefix(prefix) && (allowSet == nil || allowSet!.contains(key))) {
        filteredPrefs[key] = value
      }
    }
    return filteredPrefs
  }

字符串
错误来自于这个特定的函数:

if let allowList {
      allowSet = Set(allowList)
    }


我从来没有使用过if let函数,所以我不知道如何解决这个swift错误。有人能告诉我怎么解决这个问题吗?

0ejtzxu1

0ejtzxu11#

显然,这已经在较新版本的swift中得到了修复,但在这里,我将if替换为

allowSet = allowList == nil ? [] : Set(allowList!)

字符串
或者更好

var allowSet = Set<String>()

if allowList != nil {
    Set(allowList!)
}


第三个选择:)

var allowSet = allowList == nil ? Set<String>() : Set(allowList!)

dddzy1tm

dddzy1tm2#

您正在尝试使用“if let shorthand for shadowing an existing optional variable”功能。这在Swift 5.7中实现。您使用的Xcode版本- 13.2 -仅支持Swift 5.5.2。请参阅:https://swiftversion.net/
支持Swift 5.7的最低Xcode版本是14.0。您可以更新到该版本以修复错误。
你也可以重写代码。除了Joakim Danielson的建议,你还可以做:

var allowSet = allowList.map(Set.init) ?? []

字符串

相关问题