【问题标题】:Objective-C to Swift Conversion IssueObjective-C 到 Swift 的转换问题
【发布时间】:2015-12-29 05:22:13
【问题描述】:

我正在尝试将 Apple 自己的仅用 Objective-C 编写的示例代码转换为 Swift。

这就是 Objective C 中的内容

.h

@import UIKit;

@class AVCaptureSession;

@interface AAPLPreviewView : UIView

@property (nonatomic) AVCaptureSession *session;

@end

.m

@import AVFoundation;

#import "AAPLPreviewView.h"

@implementation AAPLPreviewView

+ (Class)layerClass
{
    return [AVCaptureVideoPreviewLayer class];
}

- (AVCaptureSession *)session
{
    AVCaptureVideoPreviewLayer *previewLayer = (AVCaptureVideoPreviewLayer *)self.layer;
    return previewLayer.session;
}

- (void)setSession:(AVCaptureSession *)session
{
    AVCaptureVideoPreviewLayer *previewLayer = (AVCaptureVideoPreviewLayer *)self.layer;
    previewLayer.session = session;
}

@end

到目前为止,这是我为 Swift 设计的:

import AVFoundation
import UIKit

class CamPreviewLayer: UIView
{
    var session: AVCaptureSession!
    override class func layerClass() -> AnyClass
    {
        return AVCaptureVideoPreviewLayer
    }

    func session() -> AVCaptureSession {
        var previewLayer: AVCaptureVideoPreviewLayer = self.layer as! AVCaptureVideoPreviewLayer
        return previewLayer.session
    }

    func setSession(session: AVCaptureSession) {
        let previewLayer: AVCaptureVideoPreviewLayer = self.layer as! AVCaptureVideoPreviewLayer
        previewLayer.session = session
    }
}

我的 Swift 代码有 3 个错误。

【问题讨论】:

  • 你不需要var session: AVCaptureSession!。你能显示你有哪个错误吗?

标签: objective-c swift function variables


【解决方案1】:

你必须像这样删除var session: AVCaptureSession

import AVFoundation
import UIKit

class AVPreviewView : UIView {
    override class func layerClass() -> AnyClass {
        return AVCaptureVideoPreviewLayer.self
    }
    func session () -> AVCaptureSession {
        return (self.layer as! AVCaptureVideoPreviewLayer).session
    }

    func setSession(session : AVCaptureSession) -> Void {
        (self.layer as! AVCaptureVideoPreviewLayer).session = session;
        (self.layer as! AVCaptureVideoPreviewLayer).videoGravity = AVLayerVideoGravityResizeAspect;

    }
}

希望对您有所帮助!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-01-01
  • 2016-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
相关资源
最近更新 更多