Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 4:无法使用实例成员';主URL';尝试连接两个字符串时在属性初始值设定项内_Swift_Variables - Fatal编程技术网

Swift 4:无法使用实例成员';主URL';尝试连接两个字符串时在属性初始值设定项内

Swift 4:无法使用实例成员';主URL';尝试连接两个字符串时在属性初始值设定项内,swift,variables,Swift,Variables,我试图将字符串变量与文本连接起来,但始终出现以下错误: import UIKit public class GlobalClass { private let MAIN_URL = "http://example.com" private let GET_TOKEN_URL = URL(string: MAIN_URL + "loginUser") //here I get: Cannot use instance member 'MAIN_URL' within property in

我试图将字符串变量与文本连接起来,但始终出现以下错误:

import UIKit
public class GlobalClass {
  private let MAIN_URL = "http://example.com"
  private let GET_TOKEN_URL = URL(string: MAIN_URL + "loginUser") //here I get: Cannot use instance member 'MAIN_URL' within property initializer; property initializers run before 'self' is available
}
有办法解决这个问题吗?我想做的是在一个全局swift文件中声明这些常量,这样它们就可以从其他类中访问。我知道它们是私有的,但我将能够通过使用getter获得它们的价值

提前谢谢你

我想你需要

struct Globals {
    static let MAIN_URL = "http://example.com/"
    static let GET_TOKEN_URL = URL(string: Globals.MAIN_URL + "loginUser") //here I get: Cannot use instance member 'MAIN_URL' within property initializer; property initializers run before 'self' is available
}
MAIN\u URL
不在允许您直接使用它的范围内,就像在您的情况下可以使用
MAIN\u URL
一样

private let GET_TOKEN_URL = URL(string: GlobalClass().MAIN_URL + "loginUser")

您需要将这两个属性设置为static或lazy。这将确保在首次访问属性时,属性初始值设定项可以访问
self

静态
进近:

public class GlobalClass {
  private static let MAIN_URL = "http://example.com"
  private static let GET_TOKEN_URL = URL(string: GlobalClass.MAIN_URL + "loginUser")
}
public class GlobalClass {
  private let MAIN_URL = "http://example.com"
  private lazy var GET_TOKEN_URL = URL(string: MAIN_URL + "loginUser")
}
lazy
方法:

public class GlobalClass {
  private static let MAIN_URL = "http://example.com"
  private static let GET_TOKEN_URL = URL(string: GlobalClass.MAIN_URL + "loginUser")
}
public class GlobalClass {
  private let MAIN_URL = "http://example.com"
  private lazy var GET_TOKEN_URL = URL(string: MAIN_URL + "loginUser")
}

您还应该遵守Swift命名约定,这对于变量名来说是较低的,因此
mainUrl
getTokenUrl

不要认为在这里是类很重要,因为属性是允许的,这些被认为是应用程序不会改变的静态常数runtime@Sh_Khan即使在不可变属性的情况下,属性初始值设定项在类初始值设定项完成执行之前被调用,因此属性无法从其自己的属性初始值设定项内部访问其他属性。此外,尽管惰性方法有效,您认为传播
GlobalClass()
对于静态values@Sh_Khan你说的传播是什么意思?使用
lazy
方法没有
静态
值。我已经尝试了两种代码,它们工作得非常好!谢谢你们两位的帮助:)