T. *_*sen 22 objective-c alloc swift
一些小步骤开始围绕Swift缠头.我基本上移植了一个旧类,它只是找到一个名称的匹配图标并返回相应的UIImage.事情的Swift部分似乎正在运行,看起来(几乎)像这样:
@objc class ImageHandler{
func iconForData(data: MyData) -> UIImage{
let imagesAndNames = [
"1": "tree.png",
"2": "car.png",
"3": "house.png",
"7": "boat.png",
]
var imageName: String? = imagesAndNames[data.imageName]
if !imageName{
imageName = "placeholder.png"
}
let icon = UIImage(named: imageName)
return icon
}
}
Run Code Online (Sandbox Code Playgroud)
上面没有任何警告.然而,我的旧Objective-C类要求在swift类上使用alloc方法.
ImageHandler *imageHandler = [ImageHandler alloc] init];
Run Code Online (Sandbox Code Playgroud)
返回错误"没有选择器'alloc'的已知类方法,我猜这是真的,但是如何逃避这个?我是否必须以我的swift-class NSObject为基础来避免这种情况?
aka*_*kyy 48
您将ImageHandler类声明为根类.它本身没有alloc方法.你需要继承NSObject:
@objc class ImageHandler : NSObject {
...
}
Run Code Online (Sandbox Code Playgroud)
从这个ADF线程中引用.
Log*_*gan 24
只是想在这里评论一下,如果你不想要子类NSObject或任何其他ObjC对象,你可以声明一个类级初始化器:
@objc class ImageHandler{
class func newInstance() -> ImageHandler {
return ImageHandler()
}
func iconForData(data: MyData) -> UIImage{
let imagesAndNames = [
"1": "tree.png",
"2": "car.png",
"3": "house.png",
"7": "boat.png",
]
var imageName: String? = imagesAndNames[data.imageName]
if !imageName{
imageName = "placeholder.png"
}
let icon = UIImage(named: imageName)
return icon
}
}
Run Code Online (Sandbox Code Playgroud)
然后在ObjC
ImageHandler * imageHandler = [ImageHandler newInstance];
Run Code Online (Sandbox Code Playgroud)
这样,除非您愿意,否则不必依赖ObjC类继承.
| 归档时间: |
|
| 查看次数: |
14149 次 |
| 最近记录: |