私はObjectiveCに慣れていません。
私はプライベートフレームワークを使用しており、Swiftコード内からプロパティの1つを変更できる必要があります。
プロパティは、ObjectiveCで次のように宣言されます。
@property (nonatomic, assign) BOOL *isSSNField;
in Swiftこのようにプロパティの値を変更しようとしています:
myClass.isSSNField = true
このエラーが発生します
Cannot assign a value of type 'Bool' to a value of type 'UnsafeMutablePointer<ObjcBool>'
ここからどこに行けばいいのか、なぜこのエラーが発生するのかわかりません
私はあなたが説明するような状況を見たことがありません。個人的には、その状況は存在しないと言いたくなります。私の人生でObjective-CでBOOL*
プロパティまたはivarを見たことがありません(そして私は年をとっています、信じてください)。ただし、次のように主張する場合:私はこれをテストしていませんが、次のように言うことができると思います。
var ok = UnsafeMutablePointer<ObjCBool>.alloc(1)
ok[0] = false // or true
let val = ok
myClass.isSSNField = val
ただし、それはcompileになると思いますが、doingの意味についてはかなりわかりません。宇宙がブラックホールに崩壊する可能性があるので注意してください。
Swift 3.1の更新
ポインタタイプの場合Swiftはpointee
プロパティを提供し、
Documentation for v3.1は、このポインタによって参照されるインスタンスにアクセスするために使用されることを示しています
ポインティフィールドを簡単に設定できます
myClass.isSSNField.pointee = false
そして、これはすべてのポインター型と変換で同じです。 ObjectiveCの値を確認したい場合BOOL*
簡単にできます
if myClass.isSSNField.pointee.boolValue
Objective-CのBOOL *はBoolのポインタです。
SwiftでUnsafeMutablePointerを使用します。
var isSSNField: ObjCBool = true
myClass.isSSNField = &isSSNField
次に、それを修正します。
関数のisDirectoryパラメーターと同じように:
func fileExists(atPath path: String, isDirectory:UnsafeMutablePointer<ObjCBool>?) -> Bool
次のコードを使用できます。
var isDirectory:ObjCBool = true
var isFileExists = FileManager.default.fileExists(atPath: <#YourPath#>, isDirectory: &isDirectory)
これを処理するためのより安全な方法は、@ TanJunHaoの回答と非常によく似ています。
var isSSNField = ObjCBool(true)
myClass.isSSNField = &isSSNField
ObjectiveCのプロパティ宣言が正しくないようです。以下のように更新してお試しください
@property (nonatomic, assign)BOOL isSSNField;