【问题标题】:Change value of enum's variable as per the latest in swift根据最新的swift更改枚举变量的值
【发布时间】:2021-12-07 06:31:12
【问题描述】:

我是 swift PL 的新手。我对新的实施有疑问。您的帮助将不胜感激。谢谢。

Desc :我在一个具有多个 API URL 的类中有一个枚举。这些 API URL 正在访问一个变量 - BaseURL 在同一个类中声明。我想从另一个类更改 BaseURL 的值,但枚举变量正在获取相同的旧值。

类:API.swift

var BaseURL = "xyz.com/"

enum apis {
  static let login = BaseURL + "login"
}

类:ViewControllerA.swift

func switchBaseURL() {
  BaseURL = "abc.com/"

  // Call API Method
  self.callAPI()
}

func callAPI(){
  print("\(apis.login)") // Result is : xyz.com/login
}

我想实现一个解决方案,可以随时从任何类切换BaseURL 的值,以便枚举每次都获取 BaseURL 中设置的最新值。

【问题讨论】:

  • BaseURL设为static类型,以便在更新Url时将其保存以供进一步使用
  • @Kudos 我尝试使用class a { static var BaseURL = String() }。然后赋值为:a.BaseURL = "xyz.com/" in AppDelegate.swift。将ViewControllerA.swift 中的值切换为-a.BaseURL = "abc.com/"。结果还是一样。
  • 好。那么改值后你是不是又打电话给self.callAPI()了?
  • @Kudos 是的。 switchBaseURL() 方法执行更改 URL 并调用 self.callAPI()。是不是因为枚举中使用的static 使它只存储以前的值而不是在更改时再次计算值?
  • 我认为是的。从static let login = BaseURL + "login" 中删除静态并将let 替换为var 并尝试

标签: swift variables enums


【解决方案1】:

这里的问题是login 被声明为static。这意味着它只计算一次。更不用说,也是let

在不大幅更改设计的情况下,您可以做的一件事是修改 login 属性,以便在每次访问时计算:

var baseURL = "xyz.com/"

enum API {
    static var login: String { baseURL + "login" }
}

print(API.login) // xyz.com/login

baseURL = "abc.com/"
print(API.login) // abc.com/login

原sn-p采用的代码:

var baseURL = "xyz.com/"

enum API {
    static var login: String { baseURL + "login" }
}

func switchBaseURL() {
    baseURL = "abc.com/"
    callAPI()
}

func callAPI(){
    print("\(API.login)")
}

switchBaseURL() // Prints abc.com/login

【讨论】:

  • 我试过了,但它不起作用
  • 那么问题出在其他地方。答案中的代码 sn-p 直接从 Xcode Playground 复制而来。注释正是控制台输出。试着把这个 sn-p 复制到你自己的 Playground 并运行它——你会看到的。我还添加了一个sn-p,它采用你的方法调用。
  • @HemantGarg 这个解决方案运行良好。我认为您的问题有所不同,或者您可能无法正确解释
  • 是的,我也在操场上尝试过这个解决方案。它的工作正常。但我创建了 2 个单独的文件并尝试同样的事情。它没有给出有效的响应。当我使用类文件 API.swiftViewControllerA.swift 时,它没有给出预期的结果
  • 我很确定您现在遇到了其他类型的问题。如果您愿意,可以分享必要的代码 sn-ps,我们会努力解决的。
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多