我是靠谱客的博主 要减肥奇异果,最近开发中收集的这篇文章主要介绍Objective-C 【OC语法:不能修改 某个对象的 结构体属性的 成员】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

看题目就知道这篇文章写的是什么了。

backBtn.frame.size = CGMakeSize(100, 100);  // 这样是错误的写法

在OC中是不允许修改某个对象的结构体属性的成员的,上面的语句,backBtn是我们实例化的一个对象,frame是它的结构体属性,而size又是frame这个属性的成员变量。根据OC语法,我们知道上面的代码是错误的。如果想要设置size,我们要这样去做:

CGRect frame = backBtn.frame;
frame.size = CGMakeSize(100, 100);
<pre name="code" class="objc">backBtn.frame = frame;
 


上面的解决方案,是把原有对象的结构体属性赋值给一个临时结构体,然后对临时结构体里的成员进行修改,然后把这个修改好的结构体变量直接赋值给原有对象的结构体变量,相当于修改了

但是我们知道,这种成员有很多,比如说frame中的origin、size,origin中的x、y,size中的width、height。每一个成员我们都这样赋值是很麻烦的,所以我建议大家为其增加一个Category(分类),让每一个对象的这些属性都能直接赋值,而赋值的繁琐语句我们均写在Category中。




#import <UIKit/UIKit.h>

@interface UIView (Extension)

@property (nonatomic, assign) CGFloat x;
@property (nonatomic, assign) CGFloat y;
@property (nonatomic, assign) CGFloat width;
@property (nonatomic, assign) CGFloat height;
@property (nonatomic, assign) CGSize size;
@property (nonatomic, assign) CGPoint origin;

@end

#import "UIView+Extension.h"

@implementation UIView (Extension)

// 重写set方法
- (void)setX:(CGFloat)x
{
    CGRect frame = self.frame;
    frame.origin.x = x;
    self.frame = frame;
}

- (void)setY:(CGFloat)y
{
    CGRect frame = self.frame;
    frame.origin.y = y;
    self.frame = frame;
}

- (void)setWidth:(CGFloat)width
{
    CGRect frame = self.frame;
    frame.size.width = width;
    self.frame = frame;
}

- (void)setHeight:(CGFloat)height
{
    CGRect frame = self.frame;
    frame.size.height = height;
    self.frame = frame;
}

- (void)setSize:(CGSize)size
{
    CGRect frame = self.frame;
    frame.size = size;
    self.frame = frame;
}

- (void)setOrigin:(CGPoint)origin
{
    CGRect frame = self.frame;
    frame.origin = origin;
    self.frame = frame;
}

// 重写get方法
- (CGFloat)x
{
    return self.frame.origin.x;
}

- (CGFloat)y
{
    return self.frame.origin.y;
}

- (CGFloat)width
{
    return self.frame.size.width;
}

- (CGFloat)height
{
    return self.frame.size.height;
}

- (CGSize)size
{
    return self.frame.size;
}

- (CGPoint)origin
{
    return self.frame.origin;
}
@end

补充: 只写头文件也是可以的,我觉得应该是@property自动生成了对应的get和set方法。这一点有待商榷。

最后

以上就是要减肥奇异果为你收集整理的Objective-C 【OC语法:不能修改 某个对象的 结构体属性的 成员】的全部内容,希望文章能够帮你解决Objective-C 【OC语法:不能修改 某个对象的 结构体属性的 成员】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部