Objective-C 不创建综合变量

2023-11-22

我是一名初级 iOS 开发人员,仍然习惯合成变量和 XCode 自动创建变量和 setter/getter 方法的概念。我做了很多研究,但无法找到解决我所面临问题的答案。

我创建了一个标头类,如下所示:

#import "Card.h"

@interface PlayingCard : Card

@property (strong, nonatomic) NSString *suit;
@property (nonatomic) NSUInteger rank;

@end

我有以下实现类:

#import "PlayingCard.h"

@implementation PlayingCard

- (NSString *)contents
{
    NSArray *rankStrings = @[@"?",@"A",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"J",@"Q",@"K"];
    return [rankStrings[self.rank] stringByAppendingString:self.suit];
}

- (void)setSuit:(NSString *)suit
{
    if([@[@"♥︎",@"♦︎",@"♠︎",@"♣︎"] containsObject:suit]) {
        _suit = suit;
    }
}

- (NSString *)suit
{
    return _suit ? _suit : @"?";
}

@end

我的错误是,每当我使用 _suit 变量时,我都会从 XCode 收到一条错误消息:

Use of undeclared identifier '_suit'; did you mean 'suit'?

据我了解, _suit 是由编译器自动生成的,我应该能够使用“_suit”访问头文件中定义的“suit”属性。是因为我重写了编译器自动生成的 setter 和 getter 方法吗?将“_suit”更改为“self.suit”似乎可以解决问题,但我很困惑为什么我的下划线合成变量似乎没有生成。任何对此的见解将不胜感激,谢谢!


如果您手动为某个对象创建两个访问器(setter 和 getter)@property,编译器假设您不需要/希望它为您合成它们以及相应的实例变量。有两种可能的解决方案。要么自己声明实例变量:

@implemntation PlayingCard
{
    NSString *_suit;
}

或者,我更喜欢的方法是使用显式的@synthesize自定义访问器上方的语句告诉编译器您仍然希望为属性合成实例变量:

@synthesize suit = _suit;

请注意,= _suit是必要的,因为由于遗留原因,一个简单的@synthesize suit;将默认命名 ivarsuit没有下划线前缀。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Objective-C 不创建综合变量 的相关文章

随机推荐

  • WinMerge:如何在比较中忽略特定单词?

    当我在 Windows 平台上使用 WinMerge 比较 2 个文件时 您知道如何忽略特定单词吗 我的意思是我想对 WinMerge 说 不要关心那串单词 房子 花园等 所以当比较这两行时 the house is at london t
  • 由于来自 localhost 的 CORS 问题,请求失败

    我在 SO 和不同的博客上看到了几十个问题 并用 答案 谈论这个问题 但都无济于事 我的本地计算机 Ubuntu 16 04 上有一个 React js 应用程序 在本地 我尝试通过运行来测试它npm start它会打开浏览器http 本地
  • 列出所有当前打开的文件句柄? [复制]

    这个问题在这里已经有答案了 可能的重复 检查Python中打开了哪些文件 Hello 是否可以获得所有当前打开的文件句柄的列表 我认为它们存储在环境中的某个位置 我对这个函数感兴趣 因为我想安全地处理出现致命错误时打开的任何文件 即关闭文件
  • 使用 Python 使用 IAM 角色连接到 Redshift

    我正在使用 sqlalchemy 和 psycopg2 将 python 连接到 redshift engine create engine postgresql user password hostname port database n
  • Slick,如何将查询映射到继承表模型?

    Slick 如何将查询映射到继承表模型 IE 我有表A B C A 是 父 表 B 和 C 是 子 表 我想知道的是我应该如何使用 slick 对此进行建模 以便 A 将是抽象的 B C 具体类型 并且查询 A 中的行将导致 B 或 C 对
  • 为什么 for_each 通过 move 返回函数

    我正在阅读文档std for each here http en cppreference com w cpp algorithm for each并看到返回值是std move f 为什么标准强制在返回值中移动输入参数 既然输入参数是按值
  • C++11 中的 POD 和继承。 struct的地址==第一个成员的地址吗?

    我编辑了这个问题以避免分心 在任何其他问题有意义之前 需要先解决一个核心问题 向任何现在看来答案似乎不那么相关的人道歉 让我们设置一个具体的例子 struct Base int i 没有虚方法 也没有继承 通常是一个非常愚蠢和简单的对象 因
  • 如何在 Nuxt 3 应用程序中添加页面加载器

    我正在使用 Nuxt 3 构建一个应用程序 我想添加一个页面加载器直到网站加载 根据本文 有一种简单但有限的解决方案和一种完全定制的解决方案 内置
  • Oracle:消除表和模式名称之间的歧义

    假设我有模式A and B 在模式中A我想打电话包X在模式中B 然而 有一个包B在模式中A A package B B package X 当我从架构 A 调用时 begin b x foo end 它寻找程序X包装内B i e A B X
  • Python:freeze.py 在哪里?

    有人知道 2 6 5 的 freeze py 安装在哪里吗 我似乎无法在任何地方找到它 是不是被拔出来换成别的东西了 它就在它一直在的地方 在下面Tools 在源分布中
  • 如何使用 Work Light 通过服务器端 javascript 发出 HTTPS 请求?

    我正在玩弄IBM 工作灯 并且我正在尝试创建一个适配器来从Google 地点 API 我想调用这个网址 https maps googleapis com maps api place search json key AIzaSyCTlPm
  • Haskell 中目录的流式递归下降

    我正在尝试使用 Haskell 进行目录结构的递归下降 我只想根据需要 懒惰地 检索子目录和文件 我编写了以下代码 但是当我运行它时 跟踪显示在第一个文件之前访问了所有目录 module Main where import Control
  • Haskell 中生成列表的唯一组合的函数

    是否有一个 Haskell 函数可以从列表中生成给定长度的所有唯一组合 Source 1 2 3 uniqueCombos 2 Source 1 2 1 3 2 3 我尝试在 Google 中查找 但找不到专门执行此操作的函数 排列不会给出
  • H5py存储字符串列表的列表

    h5py 是否有可能创建一个由字符串列表组成的数据集 我尝试创建一个可变长度的嵌套数据类型 但这会导致我的 python 解释器出现分段错误 def create dataset h5py file data I am a sentecne
  • 我们可以在 Web 应用程序中同时使用 jQuery 和 AngularJS 吗?

    我们可以在 Web 应用程序中同时使用 jQuery 和 AngularJS 吗 我读过一些建议 说不要在项目中同时使用两者 因为两者都有不同的生命周期 我们的要求是使用 ASP NET WebApi 和 AngularJS 构建响应式 W
  • 我应该在我的最新项目中使用 Cocoa 绑定吗?

    我正在启动一个项目 我认为该项目将从绑定中受益 我有一个源列表表 几个浏览器视图等 但我认为如果没有它们 它也是相当可行的 也许更容易理解 根据我有限的经验 我发现绑定很难排除故障 而且非常 神奇 例如 很难在任何地方插入日志记录来找出哪里
  • 使用正则表达式检查密码强度

    该功能是查看密码的强度 如果满足以下条件 则被认为是强的 长度大于或等于10个字符 它至少包含一位数字 至少有一个大写字母 一个小写字母 密码只能包含 ASCII 拉丁字母或数字 有没有办法减少函数中的代码量 请帮我使函数代码少于200个字
  • Powershell,使用 contains 检查文件是否包含某个单词

    我正在尝试创建一个 powershell 脚本 该脚本查看给定目录下的所有文件和文件夹 然后将 properties 文件中给定单词的所有实例更改为另一个给定单词的实例 我在下面写的内容就是这样做的 但是我的版本控制注意到每个文件中的更改
  • Rails 3 + UJS 使用 Ajax 进行远程调用并渲染生成的 JSON 对象的简单示例

    我正在尝试在我的 Rails 3 应用程序中添加一些 Ajax 功能 具体来说 我想要一个按钮 该按钮将提交 Ajax 请求以调用控制器中的远程函数 该函数随后查询 API 并将 JSON 对象返回到页面 收到 JSON 对象后 我想显示内
  • Objective-C 不创建综合变量

    我是一名初级 iOS 开发人员 仍然习惯合成变量和 XCode 自动创建变量和 setter getter 方法的概念 我做了很多研究 但无法找到解决我所面临问题的答案 我创建了一个标头类 如下所示 import Card h interf