实现iOS procotol - readonly属性

Mar*_*tes 5 ios

我有一个来自QuickLook框架的协议:

/*!
 * @abstract The QLPreviewItem protocol declares the methods that a QLPreviewController  instance uses to access the contents of a given item.
 */
@protocol QLPreviewItem <NSObject>

@required

/*!
 * @abstract The URL of the item to preview.
 * @discussion The URL must be a file URL. 
 */
@property(readonly) NSURL * previewItemURL;

@optional

/*!
 * @abstract The item's title this will be used as apparent item title.
 * @discussion The title replaces the default item display name. This property is optional.
 */
@property(readonly) NSString * previewItemTitle;


@end

/*!
 * @abstract This category makes NSURL instances as suitable items for the Preview Controller.
 */
@interface NSURL (QLPreviewConvenienceAdditions) <QLPreviewItem>
@end
Run Code Online (Sandbox Code Playgroud)

我正在尝试为readonly属性previewItemTitle创建getter和setter,以便我可以添加自定义tile:

.H

#import <Foundation/Foundation.h>
#import <QuickLook/QuickLook.h>

@interface QLPreviewItemCustom : NSObject <QLPreviewItem> {
    NSURL * previewItemURL;
    NSString *previewItemTitle;
}


@property(readonly) NSURL * previewItemURL;
@property (readonly) NSString *previewItemTitle;


@end
Run Code Online (Sandbox Code Playgroud)

.M

#import "QLPreviewItemCustom.h"


@implementation QLPreviewItemCustom

@synthesize previewItemTitle;
@synthesize previewItemURL;


@end
Run Code Online (Sandbox Code Playgroud)

这样,据我所知,我将使用synthesize方法创建getter.我该如何创建setter?

mat*_*way 5

如果只是在QLPreviewItemCustom你想要访问setter的实现中,那么为什么不将类继续类中的属性扩展为read-write:

QLPreviewItemCustom.m

#import "QLPreviewItemCustom.h"

@interface QLPreviewItemCustom ()

@property (readwrite) NSURL *previewItemURL;
@property (readwrite) NSString *previewItemTitle;

@end

@implementation QLPreviewItemCustom

@synthesize previewItemTitle;
@synthesize previewItemURL;

@end
Run Code Online (Sandbox Code Playgroud)

如果你想在任何地方使用setter,那么你将不得不使用不同的ivar名称并写下你的原始内容的getter来传递给你的新名字.像这样:

QLPreviewItemCustom.h

#import <Foundation/Foundation.h>
#import <QuickLook/QuickLook.h>

@interface QLPreviewItemCustom : NSObject <QLPreviewItem> {
    NSURL *url;
    NSString *title;
}


@property (readwrite) NSURL *url;
@property (readwrite) NSString *title;

@end
Run Code Online (Sandbox Code Playgroud)

QLPreviewItemCustom.m

#import "QLPreviewItemCustom.h"

@implementation QLPreviewItemCustom

@synthesize url;
@synthesize title;

- (NSURL*)previewItemURL {
    return self.url;
}

- (NSString*)previewItemTitle {
    return self.title;
}

@end
Run Code Online (Sandbox Code Playgroud)

值得指出的是,自己使用与另一个框架使用的相同类前缀通常不是一个好主意.即不要打电话QLPreviewItemCustom- 称之为ABCPreviewItemCustom.