2015-12-29 3 views
1

Я пытаюсь преобразовать собственный пример кода Apple, который написан только в Objective-C in Swift.Objective-C to Swift Conversion Issue

Это то, что в 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 ошибки s.

+1

u не нужно 'var session: AVCaptureSession!'. можете ли вы показать, какая ошибка у вас есть? – aaisataev

ответ

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; 

    } 
} 

Надеюсь, что это поможет!

+0

Это сработало! Спасибо! – Gizmodo

+2

скопировать пасту из http://stackoverflow.com/questions/28480383/avcapturevideopreviewlayer-and-preview-from-camera-position :) – aaisataev