【问题标题】:Passing arguments to Objective C class in Swift在 Swift 中将参数传递给 Objective C 类
【发布时间】:2015-03-02 00:28:02
【问题描述】:

目标等级:

@interface EpsonIo: NSObject {
@private
    void *handle_;
}

- (id) init;

- (void) dealloc;

- (int) open:(int)deviceType DeviceName:(NSString *)deviceName DeviceSettings:(NSString *)deviceSettings;

- (int) close;

- (int) write:(NSData *)data Offset:(size_t)offset Size:(int)size Timeout:(long)timeout SizeWritten:(size_t *)sizeWritten;

- (int) read:(NSMutableData *)data Offset:(size_t)offset Size:(size_t)size Timeout:(long)timeout SizeRead:(size_t *)sizeRead;

@end

我正在尝试使用这个类来使用我的 Epson 打印机进行打印。在我的旧 Objective-C 项目中,我可以毫无问题地打印它。

旧的 Objective-C:

// print document
EpsonIo *port = [[EpsonIo alloc] init];
if (port != nil)
{
    int errorStatus = EPSONIO_OC_SUCCESS;

    errorStatus = [port open:EPSONIO_OC_DEVTYPE_TCP DeviceName: @"192.168.1.168" DeviceSettings:nil];
    if (EPSONIO_OC_SUCCESS == errorStatus)
    {
        // settings for sending
        unsigned long sizeWritten;
        int errStatus;
        NSData *data = builder.data;

        errStatus = [port write:data Offset:0 Size:[data length] Timeout:100 SizeWritten: &sizeWritten];

        errorStatus = [port close];
    }
}

在 Swift 中,我遇到了各种错误,例如“Int is not convertible to Int32”、“Uint is not convertible to UnsafeMutablePointer”

斯威夫特:

var printFile = EpsonIo()

        var errorStatus: Int32 = 0

        errorStatus = printFile.open(257, deviceName: "192.168.1.168", deviceSettings: nil)

        var printData: NSData = printText.data

        var sizeWritten: CUnsignedLong = 0

        var newStatus = printFile.write(printData, offset: 0, size: Int(printData.length), timeout: 100, sizeWritten: sizeWritten)

我已经尝试了几个小时并尽可能多地在 Google 上搜索,但我就是想不通...有人可以帮帮我吗?

【问题讨论】:

    标签: objective-c class swift


    【解决方案1】:

    你试过了吗:

    var sizeWritten: size_t = 0        // CUnsignedLong -> size_t
    
    var newStatus = printFile.write(
        printData,
        offset: 0,
        size: Int32(printData.length), // UInt -> Int32
        timeout: 100,
        sizeWritten: &sizeWritten      // Add prefix &
    )
    
    • 在 Swift 中,UIntInt32 是不同的类型,不能隐式转换。
    • sizeWritten参数定义为C指针,在Swift中可以描述为&

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      相关资源
      最近更新 更多