公开一个从 Objective-C 到 Swift 的常量变量
Expose a constant variable from Objective-C to Swift
我必须执行按位运算,由于某种原因只能在 swift 中进行,因此我希望使用 Objective-C 初始化一些常量以在我的应用程序中使用。
我对 objective-c 不是很好,所以我知道如何做到这一点的唯一方法是创建一个 class 并给它一个 returns 值的方法但是我认为有一个更有效的值。
必须有更简洁的方法来实现这一点。目前我正在做以下事情:
Header:
#import <Foundation/Foundation.h>
#include <simd/simd.h>
#import <MetalKit/MetalKit.h>
#import <Metal/Metal.h>
@interface Bridge:NSObject
@property NSString *url;
- (MTLTextureUsage)readAndWrite;
@end
实施:
#import "MPS-Bridging-Header.h"
@implementation Bridge
- (MTLTextureUsage)readAndWrite {
return MTLTextureUsageShaderRead | MTLTextureUsageRenderTarget | MTLTextureUsageShaderWrite;
}
@end
Swift 用法:
let bridge = Bridge()
Texture.usage = bridge.readAndWrite()
如果能简化成like就好了
MTLTexReadAndWrite
就好像它是一个常量,或者也许有它,这样我就可以做到 Bridge().readAndWrite()
所以它都在一条线上?
如果您想将其公开给 Swift,我会定义一个 class 属性:
// Bridge.h
@import Foundation;
@import Metal;
@interface Bridge : NSObject
@property (class, nonatomic, readonly) MTLTextureUsage readAndWrite;
@end
和
// Bridge.m
#import "Bridge.h"
@implementation Bridge
+ (MTLTextureUsage)readAndWrite {
return MTLTextureUsageShaderRead | MTLTextureUsageRenderTarget | MTLTextureUsageShaderWrite;
}
@end
然后您可以像这样使用它:
let readAndWrite = Bridge.readAndWrite
但我想知道你为什么不直接在 Swift 中定义这个常量:
let readAndWrite: MTLTextureUsage = [.shaderRead, .renderTarget, .shaderWrite]
如果你在 Objective-C 和 Swift 中都需要相同的常量,请使用上面的桥接模式,但如果你只在 Swift 中需要它,那么我只定义它在那里并完全消除 Bridge
。
我必须执行按位运算,由于某种原因只能在 swift 中进行,因此我希望使用 Objective-C 初始化一些常量以在我的应用程序中使用。
我对 objective-c 不是很好,所以我知道如何做到这一点的唯一方法是创建一个 class 并给它一个 returns 值的方法但是我认为有一个更有效的值。
必须有更简洁的方法来实现这一点。目前我正在做以下事情:
Header:
#import <Foundation/Foundation.h>
#include <simd/simd.h>
#import <MetalKit/MetalKit.h>
#import <Metal/Metal.h>
@interface Bridge:NSObject
@property NSString *url;
- (MTLTextureUsage)readAndWrite;
@end
实施:
#import "MPS-Bridging-Header.h"
@implementation Bridge
- (MTLTextureUsage)readAndWrite {
return MTLTextureUsageShaderRead | MTLTextureUsageRenderTarget | MTLTextureUsageShaderWrite;
}
@end
Swift 用法:
let bridge = Bridge()
Texture.usage = bridge.readAndWrite()
如果能简化成like就好了
MTLTexReadAndWrite
就好像它是一个常量,或者也许有它,这样我就可以做到 Bridge().readAndWrite()
所以它都在一条线上?
如果您想将其公开给 Swift,我会定义一个 class 属性:
// Bridge.h
@import Foundation;
@import Metal;
@interface Bridge : NSObject
@property (class, nonatomic, readonly) MTLTextureUsage readAndWrite;
@end
和
// Bridge.m
#import "Bridge.h"
@implementation Bridge
+ (MTLTextureUsage)readAndWrite {
return MTLTextureUsageShaderRead | MTLTextureUsageRenderTarget | MTLTextureUsageShaderWrite;
}
@end
然后您可以像这样使用它:
let readAndWrite = Bridge.readAndWrite
但我想知道你为什么不直接在 Swift 中定义这个常量:
let readAndWrite: MTLTextureUsage = [.shaderRead, .renderTarget, .shaderWrite]
如果你在 Objective-C 和 Swift 中都需要相同的常量,请使用上面的桥接模式,但如果你只在 Swift 中需要它,那么我只定义它在那里并完全消除 Bridge
。