Ios 无法分配给此表达式的结果

Ios 无法分配给此表达式的结果,ios,swift,Ios,Swift,我正在对uiscrollview进行子类化,在layoutSubviews方法中,我有以下内容 let v = self.delegate?.viewForZoomingInScrollView!(self) let f = v?.frame if f != nil { f!.origin.x = 100 } 我得到了一个错误: Cannot assign to the result of this expression 在线 f!.origin.x = 100 因为f被声明为let且是

我正在对uiscrollview进行子类化,在layoutSubviews方法中,我有以下内容

let v = self.delegate?.viewForZoomingInScrollView!(self)
let f = v?.frame

if f != nil {
f!.origin.x = 100
}
我得到了一个错误:

Cannot assign to the result of this expression
在线

f!.origin.x = 100

因为
f
被声明为
let
且是不可变的。

因为
f
被声明为
let
且是不可变的。

在您的代码中
f
被声明为不可变的变量。在声明时初始赋值后,无法更改不可变变量

 let variable_name = 10 
 variable_name = 11 // Cannot assign to let value 'v'
let
关键字用于声明不可变变量。
var
关键字用于声明可变变量

 var variable_name = 10 
 variable_name = 14 // Can be changed
因此,将代码更改为
var f=v?.frame


另外,如果您试图修改视图的框架,则仅当您直接将其指定给
视图时,它才会起作用。frame.origin.x=100
,因为上述代码只会在
f

中创建框架的副本。在您的代码中
f
被声明为不可变变量。在声明时初始赋值后,无法更改不可变变量

 let variable_name = 10 
 variable_name = 11 // Cannot assign to let value 'v'
let
关键字用于声明不可变变量。
var
关键字用于声明可变变量

 var variable_name = 10 
 variable_name = 14 // Can be changed
因此,将代码更改为
var f=v?.frame

此外,如果您试图修改视图的框架,则仅当您直接指定给
视图?.frame.origin.x=100时,该操作才会起作用,因为上述代码只会在
f
中创建框架的副本