Objective-C 联合“->”与“.”

2023-12-30

首先我要说的是,我对整个结构和联合的事情还很陌生。在发布此内容之前我已经做了功课,并诚实地试图获得合法的澄清。如果这是错误的方法,请告诉我。首先,我尝试创建一个联合,因为我正在组合不同的数据类型。我唯一真正的问题/问题是点运算符与 ->。我可以使用

->

但不是

.

我只是好奇为什么?我在堆栈上阅读了一堆使用“.”显示示例或“答案”的帖子,但在现实世界中没有运气。我玩过“typedef”就像......

typedef union _myUnion
{
     int intValue;
     bool boolValue;
}myUnion;

但这似乎并没有什么不同。如果有人解释我做错了什么,我将不胜感激。这是我正在尝试做的事情的快速示例。为了简单起见,我将只发布一些结构/联合语法,并且不会添加任何子类代码,因为这不是问题。

例子.h

#import "<Foundation/Foundation.h"

union myUnion
{
   int intValue;
   bool boolValue;
};

@interface MyClass : NSObject
{
    union myUnion *someProperty;
}

@property (nonatomic, assign) union myUnion *someProperty;

-(void)doSomething;

@end

示例.m

#import "MyClass.h"

@implementation MyClass

@synthesize someProperty = _someProperty;

- (id)init
{
//Some init method...
}

- (void)doSomething
{
    NSLog(@"I Did Something...");
}

@end

所以现在在我的另一堂课上这有效......

MyClass *newObject = [MyClass alloc] init];
newObject.someProperty->intValue = 6;

但这并不...

MyClass *newObject = [MyClass alloc] init];
newObject.someProperty.intValue = 6;

此时我更感兴趣的是了解为什么后者不起作用?有趣的是,如果我去掉 .h 文件中该属性的指针。

@interface MyClass : NSObject
    {
        union myUnion someProperty;
    }

@property (nonatomic, assign) union myUnion someProperty;

这 ”。”可以代替“->”,但现在它不可分配。

作为旁注,如果我将 bool 更改为 int 并将其设为结构,则会发生相同的情况。不幸的是,我首先精通 Objective-C,然后慢慢地学习严格的 C。所以我对c的理解有点薄弱,但这就是obc的美妙之处,我可以用一种语言的价格来学习两种语言!如果不算open-gl的话。

我想问,是否有人可以发布一个有效的代码示例,然后我可以找出我做错了什么,或者彻底解释我做错了什么以及我错过的一些基本概念。从那里我可以弄清楚如何编写我自己的工作代码。我不需要两者,也不期望得到帮助,但想学习,这样我就可以解决自己的问题,而不仅仅是修补有缺陷的代码而不了解它是如何工作或为什么工作的。


The a->b运算符是简写(*a).b- 这就像使用.但首先进行取消引用。什么时候合适a是一个指针。

因为在你原来的例子中someProperty是一个指向联合的指针,您需要首先取消引用该指针。这意味着您需要使用:

(*newObject.someProperty).intValue // confusing!

Or

newObject.someProperty->intValue // much better

来访问它。

当然,一旦你改变了someProperty要成为联合而不是指向联合的指针,您可以使用.反而。所以:

  • a->b:访问指针上的结构/联合成员
  • a.b:访问原始结构/联合上的结构/联合成员
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Objective-C 联合“->”与“.” 的相关文章

随机推荐

  • 单击 ListView 项目会更改项目内元素的状态吗?

    我不知道如何解释这个问题 但我会尝试 我有一个包含多个项目的 ListView 每个项目内部都有一个 TextView 和两个 ImageView 我希望当我单击它们时 ImageView 会发生变化 并且当我长时间按下 ListView
  • 如何清除 Android 中的旧徽章计数

    我设置 0 表示其显示徽章计数为 1 如何清除我的旧徽章计数 徽章计数设置方法 public static void setBadge Context mContext int count String launcherClassName
  • 使用 Visual Studio 2010 将 VB6 迁移到 .Net

    有人使用 Visual Studio 2010 将 VB6 项目迁移到 Net 吗 我已经在 VS2005 中测试了迁移 但是生成的 Net 代码非常混乱 因此我们决定不迁移到 Net 那么VS2010的迁移向导比VS2005或VS2008
  • REST API 上的 CakePHP 身份验证

    因此 我正在为我正在开发的 Web 应用程序创建一个 REST API 并且我知道身份验证的基本方法是在每个请求上发送凭据或发送令牌 由于我以前从未使用过令牌 因此我想我可以为每个请求发送凭据 关键是我找不到任何有关如何在控制器中处理此问题
  • 使用 pandas.SparseSeries.from_coo() 函数的非 NDFFrame 对象错误

    我正在尝试将 COO 类型稀疏矩阵 来自 Scipy Sparse 转换为 Pandas 稀疏序列 从文档 http pandas pydata org pandas docs stable sparse html http pandas
  • 在 Keras 中设置 LearningRateScheduler

    我正在 Keras 中设置学习率调度程序 使用历史损失作为 self model optimizer lr 的更新程序 但 self model optimizer lr 上的值不会插入到 SGD 优化器中 并且优化器为使用默认学习率 代码
  • 如何禁用 vscode 中的误报错误?

    我写了这个基本的 C 程序 int main int argc char const argv int n rand int a n return a 0 哪个在 gcc 中正确编译 但是 MS C C 智能感知在显示错误曲线时指出expr
  • 用多行突出显示 ggplot 中的一行

    我想改变size linetype colorggplot 中的一行等 这是一个最小的可重现示例 library tidyverse Data in wide format df wide lt data frame Horizons se
  • 从 UIButton 中获取 UILabel

    我有一个 UIButton 其中 UILabel 作为子视图添加到其中 有没有一种简单的方法可以将 UILabel 从中取出 以便我可以更改它的标题 如果您指定一个tag当您仍然有对它的引用时 您可以稍后通过搜索视图来找到它tag 像这样
  • 如何正确使用 ES6“导出默认值”和 CommonJS“要求”?

    我一直在努力Webpack教程 http blog madewithlove be post webpack your bags 在其中一个部分中 它给出了包含该问题的一行本质的代码示例 export default class Butto
  • 使用 C# 获取 MySQL 记录数

    我想知道如何使用 C 获取查询的记录计数 这是我使用的代码 MySqlDataReader recordset null query new MySqlCommand SELECT FROM test ORDER BY type ID AS
  • 双括号初始化 - 优点

    知道我们可以通过使用双括号初始化来初始化java中的集合 对此进行了一些搜索 发现由于其性能问题 不建议使用它 private static final Set
  • VBA复制文件;抑制“文件已存在”并确定是否成功?

    我有一些代码用于将文件夹从本地 PC 复制到网络共享驱动器 以进行备份 我对我的代码有两个问题 首先 当代码运行时 它的作用就像 Windows 中的复制 粘贴 如果文件已经存在 它会询问我是否要覆盖它们 我确实想覆盖它们 因为我每天都运行
  • 如何使用设备货币格式格式化浮点值?

    我有一个可以打印计算出的货币值的应用程序 我想以默认货币格式显示该值 例如在欧洲你可以写 1 000 95 在美国我想你会写 1 000 95 在其他货币中 小数部分显示的值或多或少 在美国为 2 但在日本为 0 如何获得所有现有货币的尽可
  • Android Viewpager 项目访问

    我的目标是能够滑动 3 个不同的布局 并能够单击每个布局上的项目 目前 滑动功能运行良好 可以查看所有 3 个布局 活动 public class FetchMenu extends Fetch protected ImageView bl
  • 添加更高版本的语句?

    我正在使用 1 6 即 API 4 来构建我的应用程序 更高版本支持几个命令 我想编写这些命令并使应用程序更兼容更高版本 就像 我使用标签 我想使用 setLeftStripDrawable 和 setRightStripDrawable
  • 玩转无穷大——懒惰算术

    许多现代编程语言允许我们处理潜在的无限列表并对它们执行某些操作 示例 Python EvenSquareNumbers x x for x in naturals if x mod 2 0 这样的列表可以存在 因为只计算实际需要的元素 懒惰
  • gitolite-admin 克隆问题

    我对克隆 gitolite admin 存储库的问题感到疯狂 我已经关注了这个http sitaramc github com gitolite install html migr http sitaramc github com gito
  • scanf字段宽度字符串溢出

    关于缓冲区溢出 以下哪一项是安全的 char buf 10 0 scanf 10s buf or char buf 10 0 scanf 9s buf 根据我读到的内容 我将选择第二个 sizeof 减一 但问题非常微妙 我已经看到代码暗示
  • Objective-C 联合“->”与“.”

    首先我要说的是 我对整个结构和联合的事情还很陌生 在发布此内容之前我已经做了功课 并诚实地试图获得合法的澄清 如果这是错误的方法 请告诉我 首先 我尝试创建一个联合 因为我正在组合不同的数据类型 我唯一真正的问题 问题是点运算符与 gt 我