🤖

SwiftでreadonlyなプロパティをObjective-C側に公開する

2021/12/29に公開

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