gpt4 book ai didi

objective-c - 警告 - 不兼容的指针类型使用类型为 'NSString *__strong' 的表达式初始化 'UITextField'

转载 作者:太空狗 更新时间:2023-10-30 03:49:34 25 4
gpt4 key购买 nike

我得到这段代码,XCode 警告我“不兼容的指针类型正在使用 UITextField 类型的表达式初始化 NSString *__strong”。

NSString *name = (UITextField *)searchText.text;

但是这个很好

NSString *name2 = [(UITextField *)searchText text];

这个也不错

NSString *name3 = [(UITextField *)searchText.text mutableCopy];

我有两个问题:

  1. 我对 obj.*[obj *]
  2. 感到困惑
  3. 为什么“mutableCopy”在这种情况下是正确的?

我不知道如何在 Apple 开发者文档中搜索这些问题。

最佳答案

在第一个版本中,由于运算符的优先级,您将 searchText.text 转换为 UITextField*,您想要做的可能是转换 搜索文本;

NSString *name = ((UITextField *)searchText).text;

在第二个版本中,您没有点,因此编译器将您的转换理解为将 searchText 转换为 UITextField 并将文本消息发送给它。换句话说,完全正确。

最后一个案例有点棘手,因为它同时涉及运行时和编译时。据我了解;

  • 您将 searchText.text 转换为 UITextField*。运行时仍然知道该对象是一个 NSString 并且存在于两者上的 mutableCopy 消息无论如何都会转到正确的方法 [NSString mutableCopy] 并创建/返回 NSString 的可变副本,因此运行时它可以工作没问题。
  • 由于 mutableCopy 返回 id(引用 NSMutableString),编译器可以为 NSString 赋值(id 可以赋值给任何东西),所以编译时间是好的。

一个问题,searchText原来是什么?最后一个没有警告编译的版本表明它已经是一个 UITextField*,或者至少是一个可以接收 text 消息的类型。如果是这样,你应该能够做到;

NSString *name3 = [searchText.text mutableCopy];

关于objective-c - 警告 - 不兼容的指针类型使用类型为 'NSString *__strong' 的表达式初始化 'UITextField',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9775269/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com