暴露从Objective-C到Swift的常数变量



我必须做一个仅出于某种原因而在Swift中才有可能的位操作,因此我希望在我的应用程序中使用objective-c初始化某些常数。

我对Objective-C并不那么好,所以我知道如何做的唯一方法是创建一个类并给它一种返回价值的方法,但我认为有一个更有效的值。p>必须有一种更简洁的方法来实现这一目标。目前,我正在做以下操作:

标题:

#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

快速用法:

let bridge = Bridge()
Texture.usage = bridge.readAndWrite()

如果可以简化地喜欢的话,那将是很棒的 MTLTexReadAndWrite好像是常数或也许有一个,所以我可以做Bridge().readAndWrite(),所以它全部在一行上?

如果要将其暴露给Swift,我将定义一个类属性:

//  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

最新更新