class Actor {
let agent: String? = "nobody"
init(agent: String){
self.agent = agent // error: immutable value 'self.agent' may only be initialized once
}
}
let John = Actor(agent: "xyz")
我对此处发生的序列感到困惑(我完全了解var
和let
之间的差异)。但为什么我会收到这个错误?
init
方法,那么这并不意味着我没有使用
默认参数?答案 0 :(得分:2)
您不能多次分配let变量 - 但是,您可以定义它并使其保持未初始化状态。然后,在"nobody"
方法中,您可以将agent
作为class Actor {
let agent: String
init(agent: String = "nobody"){
self.agent = agent
}
}
print(Actor().agent) // "nobody"
print(Actor(agent: "xyz").agent) // "xyz"
参数的默认值。
class Actor {
let agent: String
...
init() {
self.agent = "nobody"
...
}
init(agent: String, ...){
self.agent = agent
...
}
}
正如亚历山大在下面的评论中所建议的那样,如果你的init方法中有太多的参数,默认值可能会有点混乱。考虑创建一个单独的init方法来设置默认值。
$(document).ready(function(){
$('.opener').click(function(){
function name(){
if($('.bd').css('margin-left') == ($('body').width()*25)/100+'px'){
$('.bd').css({
'animation':'expandbody 2s',
'margin-left':'0',
'width':'100%'
});
$('.menu').css({
'animation':'closemenu 1s',
'width':'0%',
'display':'none'
});
}else{
$('.bd').css({
'animation':'smallerbody 2s',
'margin-left':'25%',
'width':'75%'
});
$('.menu').css({
'animation':'expandmenu 1s',
'width':'25%',
'display':'block'
});
}
}
name();
});
});