roc*_*ock 5 xcode objective-c ios5
大家好,我得到了这个代码,XCode警告我"不兼容的指针类型初始化NSString*__ strong与UITextField类型的表达式".
NSString *name = (UITextField *)searchText.text;
Run Code Online (Sandbox Code Playgroud)
但是这个很好
NSString *name2 = [(UITextField *)searchText text];
Run Code Online (Sandbox Code Playgroud)
这一个也很好
NSString *name3 = [(UITextField *)searchText.text mutableCopy];
Run Code Online (Sandbox Code Playgroud)
我有两个问题:
obj.*和[obj *]我不知道如何在Apple开发人员文档中搜索这些问题; 请帮忙.
在第一个版本中,由于运算符优先级,你要转换searchText.text为a UITextField*,你想要做的可能就是强制转换searchText;
NSString *name = ((UITextField *)searchText).text;
Run Code Online (Sandbox Code Playgroud)
在第二个版本中,您没有点,因此编译器会理解您的强制类型转换为将searchText转换为UITextField并向其发送文本消息.换句话说,完全正确.
最后一种情况有点棘手,因为它涉及运行时和编译时.据我所知;
searchText.text了一个UITextField*.运行时仍然知道该对象是一个NSString,并且mutableCopy两者上存在的消息无论如何都将转到正确的方法[NSString mutableCopy]并创建/返回NSString的可变副本,因此运行时它可以正常工作.mutableCopy返回id(引用NSMutableString),编译器对NSString的赋值是可以的(id可以分配给任何东西),所以编译时间没问题.一个问题,searchText原来是什么?在没有警告的情况下编译的最后一个版本表明它已经是一个UITextField*,或者至少是一个可以接收text消息的类型.如果是这样,你应该能够做到;
NSString *name3 = [searchText.text mutableCopy];
Run Code Online (Sandbox Code Playgroud)