一些协议问题

时间:2011-08-03 11:01:10

标签: objective-c ios interface protocols

我知道如何在java中实现它,但我在objetice-c

中捣乱

在java中我会有这样的界面:

public interface Car {
    public void startCar();
}

和实现此接口的类:

public class SomeCarImpl implements Car {
   public void startCar() {
      System.out.println("starting the car...");
   }
}

现在我可以在我的主要班级

public void MainClass {
   public static void main(String [] args) {
       Car myCar = new SomeCarImpl();
       car.startCar();
   }
}

现在我在objective-c遇到了麻烦。前两个方面很容易用协议制作,但是当我想这样称呼时,没有任何反应

//header
id <Car> *myCar;

//instance
myCar = [[SomeCarImpl alloc] init];

//calling and nothing happens
[myCar startCar];

我希望你能理解我的问题......并帮助我: - )

//在这里编辑是代码

@interface SomeCarImpl:NSObject<Car>
@end

@implementation SomeCarImpl
-(void)startCar{
NSLog(@"run");
}
@end  

@protocol Car <NSObject>
-(void)startCar;
@end



@interface DetailViewController:UIViewController<UISplitViewControllerDelegate> {
IBOutlet UIButton *runButton;
id<Car> myCar;
}
@property(strong, nonatomic)IBOutlet UIButton *runButton;
@property(strong, nonatomic)id<Car> myCar;
@end

最后(detailViewController.myCar = [[SomeCarImpl] alloc] init]在tableView中预先调用)

-(IBAction)runButton:(id)sender {
[myCar startCar];
}

1 个答案:

答案 0 :(得分:3)

你的Java代码会模糊地翻译成这样的东西:

//public interface Car {
//    public void startCar();
//}

@protocol Car
- (void)startCar;
@end

//public class SomeCarImpl implements Car {
//    public void startCar() {
//        System.out.println("starting the car...");
//    }
//}

@interface SomeCarImpl : NSObject<Car>

@end

@implementation SomeCarImpl

- (void)startCar {
    NSLog(@"starting the car...");
}

@end

// Car myCar = new SomeCarImpl();
// car.startCar();
id<Car> myCar = [[SomeCarImpl alloc] init];
[myCar startCar];

在您的ObjC代码中,您需要从此行中删除星号:

id <Car> *myCar;

因为id类型已经是指针(虽然我不认为这不是你问题的根源)。