🤖
SwiftでreadonlyなプロパティをObjective-C側に公開する
Objective-C
の時に、特定のプロパティをreadonly
で公開するというのを結構やっていた。
いきなり全部をSwift
にするのは怖いから徐々に浸食していこうと思っているんだけど、併用している時にはどう書けばいいんだろう?
と思ったのでメモってみた。
よく書くパターン(Objective-C)
Sample.h
#import <Foundation/Foundation.h>
@interface Sample : NSObject
@property (nonatomic, copy, readonly) NSString *item1;
@end
Sample.m
#import "Sample.h"
@interface Sample ()
@property (nonatomic, copy) NSString *item1;
@end
@implementation Sample
@end
Swiftで書くと
Sample.swift
import Foundation
class Sample: NSObject {
private(set) var item1 = ""
}
ちなみに
Sample.swift
import Foundation
class Sample: NSObject {
var item1 = ""
private(set) var item2 = ""
private var item3 = ""
}
と書くと
PROJECTNAME-Swift.h
@interface Sample : NSObject
@property (nonatomic, copy) NSString * item1;
@property (nonatomic, readonly, copy) NSString * item2;
- (instancetype)init OBJC_DESIGNATED_INITIALIZER;
@end
という感じになるらしい。
Discussion