静态变量被视为 let 常量?
Static var being treated as let constant?
我有一个包含 3 个静态变量的结构 (someUrl):
struct someUrl {
static var keywords = String()
static var someUrlStart = String()
static var someUrlEnd = String()
}
和一个 class (Url) 和一个类型为 someUrl 的变量:
class Url {
var someUrlConstructor: someUrl
init(keywords: String, someUrlEnd: String, someUrlStart: String) {
self.someUrlConstructor = someUrl(someUrlStart = someUrlStart, keywords = keywords, someUrlEnd = someUrlEnd)
}
}
在尝试初始化 class 中的变量时,Xcode 抛出一个错误,指出 someUrlStart 是一个 let 常量。
cannot assign to value: 'someUrlStart' is a 'let' constant
到目前为止我的代码中只有这些,我不明白为什么静态变量会被视为常量。这是特定于初始化器的吗?
你在这里混淆了编译器。首先你的语法在传递参数方面是错误的,它应该是 :
而不是 =
,然后你应该删除 static
并更改参数的顺序:
struct someUrl {
var keywords = String()
var someUrlStart = String()
var someUrlEnd = String()
}
class Url {
var someUrlConstructor: someUrl
init(keywords: String, someUrlEnd: String, someUrlStart: String) {
self.someUrlConstructor = someUrl(keywords: keywords, someUrlStart: someUrlStart, someUrlEnd: someUrlEnd)
}
}
或者,如果您想让它们保持静态,请完全删除参数,因为现在它们是静态变量,而不是成员/实例变量:
struct someUrl {
static var keywords = String()
static var someUrlStart = String()
static var someUrlEnd = String()
}
class Url {
var someUrlConstructor: someUrl
init(keywords: String, someUrlEnd: String, someUrlStart: String) {
self.someUrlConstructor = someUrl()
}
}
编译器认为你在做什么(或者基本上你在写 =
时实际上在做什么)是试图改变 someUrlEnd
(和其他两个)你作为初始值设定项参数实际上是一个常数。
除了错误的语法,我没有看到 static
或 class Url
的用途,只需使用 struct someUrl
,它的默认初始化程序并从那里开始。一般注意事项:请大写结构的第一个字母:SomeUrl
.
static
变量属于 struct
本身,而不是实例。因此,您无法使用点符号通过实例访问它们。
不确定您想做什么,但这在技术上可行:
struct SomeUrl {
static var keywords = String()
static var someUrlStart = String()
static var someUrlEnd = String()
}
class Url {
let someUrlConstructor = SomeUrl()
init(keywords: String, someUrlEnd: String, someUrlStart: String) {
SomeUrl.keywords = keywords
SomeUrl.someUrlStart = someUrlStart
SomeUrl.someUrlEnd = someUrlEnd
}
}
我有一个包含 3 个静态变量的结构 (someUrl):
struct someUrl {
static var keywords = String()
static var someUrlStart = String()
static var someUrlEnd = String()
}
和一个 class (Url) 和一个类型为 someUrl 的变量:
class Url {
var someUrlConstructor: someUrl
init(keywords: String, someUrlEnd: String, someUrlStart: String) {
self.someUrlConstructor = someUrl(someUrlStart = someUrlStart, keywords = keywords, someUrlEnd = someUrlEnd)
}
}
在尝试初始化 class 中的变量时,Xcode 抛出一个错误,指出 someUrlStart 是一个 let 常量。
cannot assign to value: 'someUrlStart' is a 'let' constant
到目前为止我的代码中只有这些,我不明白为什么静态变量会被视为常量。这是特定于初始化器的吗?
你在这里混淆了编译器。首先你的语法在传递参数方面是错误的,它应该是 :
而不是 =
,然后你应该删除 static
并更改参数的顺序:
struct someUrl {
var keywords = String()
var someUrlStart = String()
var someUrlEnd = String()
}
class Url {
var someUrlConstructor: someUrl
init(keywords: String, someUrlEnd: String, someUrlStart: String) {
self.someUrlConstructor = someUrl(keywords: keywords, someUrlStart: someUrlStart, someUrlEnd: someUrlEnd)
}
}
或者,如果您想让它们保持静态,请完全删除参数,因为现在它们是静态变量,而不是成员/实例变量:
struct someUrl {
static var keywords = String()
static var someUrlStart = String()
static var someUrlEnd = String()
}
class Url {
var someUrlConstructor: someUrl
init(keywords: String, someUrlEnd: String, someUrlStart: String) {
self.someUrlConstructor = someUrl()
}
}
编译器认为你在做什么(或者基本上你在写 =
时实际上在做什么)是试图改变 someUrlEnd
(和其他两个)你作为初始值设定项参数实际上是一个常数。
除了错误的语法,我没有看到 static
或 class Url
的用途,只需使用 struct someUrl
,它的默认初始化程序并从那里开始。一般注意事项:请大写结构的第一个字母:SomeUrl
.
static
变量属于 struct
本身,而不是实例。因此,您无法使用点符号通过实例访问它们。
不确定您想做什么,但这在技术上可行:
struct SomeUrl {
static var keywords = String()
static var someUrlStart = String()
static var someUrlEnd = String()
}
class Url {
let someUrlConstructor = SomeUrl()
init(keywords: String, someUrlEnd: String, someUrlStart: String) {
SomeUrl.keywords = keywords
SomeUrl.someUrlStart = someUrlStart
SomeUrl.someUrlEnd = someUrlEnd
}
}