我有一个包含3个静态变量的struct(someUrl):
struct someUrl {
static var keywords = String()
static var someUrlStart = String()
static var someUrlEnd = String()
}
和类(url),其变量类型为someUrl:
class Url {
var someUrlConstructor: someUrl
init(keywords: String, someUrlEnd: String, someUrlStart: String) {
self.someUrlConstructor = someUrl(someUrlStart = someUrlStart, keywords = keywords, someUrlEnd = someUrlEnd)
}
}
在尝试初始化类中的变量时,Xcode抛出一个错误,指出someUrlStart是一个let常量。
无法赋值:'someUrlStart'是'let'常量
到目前为止,这是我在代码中所拥有的全部内容,并且我不明白为什么静态var将被视为常量。这是否特定于初始化器?
答案 0 :(得分:5)
你在这里混淆了编译器。首先你的语法在传递参数方面是错误的,它应该是<div id="video">
<iframe width="100%" height="100%" src="https://www.youtube.com/embed/zWAiQJvwb8Q?autoplay=1&loop=1&controls=0&rel=0&showinfo=0&playlist=zWAiQJvwb8Q&modestbranding=1" frameborder="0" allowfullscreen="allowfullscreen"></iframe>
</div>
#video {
height:100%;
width:100% !important;
background-size:100% 100%;
position:relative;
overflow:hidden;
}
而不是:
,那么你应该删除=
并改变参数的顺序:
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
。
答案 1 :(得分:1)
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
}
}