我找到了一个关于如何做一些用Swift
写的东西的教程。我在Objective-C
项目的尾端,我尝试将这些类导入Objective-C
,但that's been a bug-riddled, time monopolizing disaster,所以我从Swift翻译改为Objective-C。
我将UIView.h/m
置于没有警告/错误的位置,但在UIViewController
上添加视图则是另一回事。我已经发布了初始化代码,我试图"翻译"下面。我欢迎输入:我犯了什么。
来自Swift类的代码用于初始化UIView:
var parentFrame :CGRect = CGRectZero
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = Colors.clear
}
来自我"翻译的代码" Objective-C类用于初始化UIView
myUIView.h
// At MartinR's suggestion, I removed the pointer here
@property (nonatomic) CGRect parentFrame;
myUIView.m
// No compiler errors -- the errors occur on the UIViewController
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:(self.parentFrame)];
self.parentFrame = CGRectZero;
if (self) {
[super setFrame:self.parentFrame];
self.backgroundColor = [UIColor whiteColor];
}
return self;
}
当我尝试将UIView添加到UIViewController时,会出现问题。我无法弄清楚为什么我会在下面收到警告:
Swift UIViewController代码添加UIView
func addHolderView() {
let boxSize: CGFloat = 75.0
holderView.frame = CGRect(x: view.bounds.width / 2 - boxSize / 2,
y: view.bounds.height / 2 - boxSize / 2,
width: boxSize,
height: boxSize)
holderView.parentFrame = view.frame
holderView.delegate = self
view.addSubview(holderView)
holderView.addOval()
}
我的"翻译" Objective-C ViewController充满了实现错误
myUIViewController.h
#import "HolderView.h"
// blah blah
@property (nonatomic, strong) HolderView *holderView;
myUIViewController.m
- (void)addHolderView {
CGFloat boxSize = 75.0;
// WARNING: The following line says "expression result unused"
[self.holderView initWithFrame:CGRectMake(_view.bounds.size.width / 2 - boxSize / 2,
_view.bounds.size.height / 2 - boxSize / 2,
boxSize,
boxSize)];
// Warning here went away by removing the pointer on CGRect parentFrame
self.holderView.parentFrame = view.frame;
self.holderView.delegate = self; // I have the delegate stuff squared away
[self.view addSubview:self.holderView];
}
感谢您的阅读。
更新以反映MartinR在评论中的输入。
我更新了上面的代码,删除CGRect parentFrame
上的指针。
答案 0 :(得分:1)
Swift版addHolderView
正在使用已存在的holderView
并更新它。你要么试图重新启动存在的东西,要么初始化一些尚未分配的东西。很难知道哪一个,但任何一个都是个坏主意。
要模仿原始代码,只需指定一个没有init的新帧大小。要确定要进行的操作,请使用调试器或self.holderView
语句检查NSLog
是否指向有效对象。