关于Objective-C 错误代码 Expression is not assignable 引发的问题
来源:互联网 发布:软件技能有哪些 编辑:程序博客网 时间:2024/06/06 03:20
今天在一个OC代码练习中我遇到了 Expression is not assignable 这个问题,起因是这样的
我先是创建了一个Person 类,然后在类中定义了一个Studen 结构体,然后利用这个结构体定义一个 Bob 变量,.h文件的内容如下
#import <Foundation/Foundation.h>typedef struct{ int age; int number;}Student;@interface Person : NSObject{ @public Student Bob;}@property (nonatomic, assign) Student Bob;@end
然后我在main 函数里面创建了一个Person 的对象p1 ,我想利用p1 对其内置的Bob.age 属性赋值,很自然的我想到了这种方法
p1.Bob.age = 14;
结果刚写完就出现了这个
看来这样是行不通的了,于是百度错误关键字 Expression is not assignable
貌似找到了原因
p1.Bob 与Bob.age 中的两个点的含义是不同的,第一个点是OC中的点语法,第二个点是C语言中的语法,
而且由于OC只是C语言的一个扩展,所以上面的错误代码会被转成C语言的函数调用形式,类似于这样
getBob().age = 14;
然后我引用我看到的文章的原话
而在C语言里,函数的返回值是一个R-Value,是不能直接给它赋值的(所谓的R-Value,就是只能出现在等号的右边,你可以理解成是一个常量;而可以被赋值的是L-Value,可以出现在等号的左边,通常是变量)。因此,当你打算直接给函数的返回值赋值的时候,编译器告诉你"这个表达式无法被赋值"。这就是这个错误的出现原因。
看来原因就是出现在这里了,接下来就是解决办法了
我总结了有几个解决办法
1.在main 函数里面新建一个结构体变量然后对p1.Bob 进行等价赋值,具体代码如下
Person *p1 = [[Person alloc] init]; Student subBob; p1.Bob = subBob; subBob.age = 14;
这样对subBob 的age 赋值其实就是对p1.Bob的age 赋值了
2.将前面的点换成 ->
直接将前面的点换掉肯定是不行的,要在.h 文件里面先声明成员变量,而且因为涉及到作用域的问题,要把成员变量的作用域设置为@public
@interface Person : NSObject{ @public Student Bob;}
之后在main 函数里面就可以这样用了
p1->Bob.age = 14;
0 0
- 关于Objective-C 错误代码 Expression is not assignable 引发的问题
- expression is not assignable
- Expression is not assignable
- Expression is not assignable
- Xcode提示“expression is not assignable”
- Xcode提示“expression is not assignable”
- Xcode提示“expression is not assignable”
- Xcode提示“expression is not assignable”
- Xcode提示“expression is not assignable”
- Xcode提示“expression is not assignable”
- Xcode提示“expression is not assignable”
- Xcode提示“expression is not assignable”
- 关于self.view.frame.size.width赋值会出现expression is not assignable 错误
- 关于self.view.frame.size.width赋值会出现expression is not assignable 错误
- 关于self.view.frame.size.width赋值会出现expression is not assignable 错误
- iOS Xcode 编译错误 “expression is not assignable”
- iOS开发初级错误 Expression is not assignable
- is not assignable to
- Java中根据某一分隔符拆分字符串
- bzoj 1493 [NOI2007]项链工厂 线段树
- 按键精灵脚本代码
- PL/SQL 批量SQL
- OpenCV——无法解释的外部符号
- 关于Objective-C 错误代码 Expression is not assignable 引发的问题
- java代码调试有感而发
- 生成窗口最大值数组 + 双端队列
- Unsupervised Rrpresentation Learning with Deep Convolutional Generative Adversarial Networks
- 细谈getRequestDispatcher()与sendRedirect()的区别
- 经验之谈:35 岁的代码工人给后辈们的一些建议
- order by 自定义排序
- Java中继承 extends
- QT如何在点关闭按钮时执行一些操作