在'const _strong id'类型的对象上找不到属性'tag'

Sai*_*son 2 objective-c ios

tag为我的UILabel 设置了StoryBoard属性检查器,我的ViewController.m上有这个代码:

for (id subview in [[self view] subviews]) 
{
    if (subview.tag==1) 
    {
        [subview setFont:[UIFont fontWithName:@"Raleway-ExtraLight" size:12]];
    } else if (subview.tag==2) {
        [subview setFont:[UIFont fontWithName:@"Raleway-ExtraLight" size:28]];
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的代码时,我收到此错误:

在'const _strong id'类型的对象上找不到属性'tag'

我错过了什么?谢谢......

Ber*_*sms 8

更改

for (id subview in [[self view] subviews]) {
Run Code Online (Sandbox Code Playgroud)

for (UIView *subview in [[self view] subviews]) { 
Run Code Online (Sandbox Code Playgroud)

问题是编译器不知道id实际上是什么,所以你不能使用.关于它的符号.如果你想跟上id,可以使用((UIView*)id).tag将其转换为UIView


rma*_*ddy 6

虽然改变的类型subview,从idUIView *在这种情况下最好的选择,另一种可行的解决办法是改变:

if (subview.tag == 1)
Run Code Online (Sandbox Code Playgroud)

至:

if ([subview tag] == 1)
Run Code Online (Sandbox Code Playgroud)

对类型对象进行方法调用id使编译器比尝试访问属性更快乐(尽管它们本质上是相同的).