我有一个函数,如果条件满足则返回图像,否则返回nil
- (UIImage *)getProfilePic{
if (doc.userProperties != nil) {
UIImage *image = [UIImage imageNamed:@"placeholder.png"];
return image;
}
else {
return nil;
}
}
我想转换这是快速的。我已经尝试了这个,但它在返回nil时显示错误,并且通过将错误显示为unwrapping nil而崩溃。
func getProfilePic(){
var image : UIImage?
if doc!.userProperties != nil {
image = UIImage(named: "placeholder.png")!
return image!
}
else {
return nil
}
}
at" return nil"它显示nil与返回类型不兼容'的UIImage'
答案 0 :(得分:3)
func getProfilePic(){ var image : UIImage? if doc!.userProperties != nil { image = UIImage(named: "placeholder.png")! return image! } else { return nil } }
是的,所以这里有一些问题。首先,您的代码没有返回类型。如果我们忽略您的方法的主体并仅查看签名,则Objective-C等价物将如下所示:
- (void)getProfilePic;
So Swift& Objective-C在这里抱怨同样的事情:你想要返回的是什么,并且方法的声明返回类型不匹配。
如果它有用,因为你似乎比Swift更熟悉Objective-C,如果我们将它转换回Objective-C,这就是你的Swift方法的样子:
- (void)getProfilePic {
UIImage *image;
if (doc.userProperties) {
image = UIImage(named: @"placeholder.png");
return image;
}
else {
return nil;
}
}
同样,这将生成相同或类似的编译时警告或错误,因为返回类型与方法签名不匹配。但是,对于展开nil
(但是Swift会),Objective-C不会崩溃。
您实际上要返回的是UIImage?
,因此我们需要更新方法签名。
func getProfilePic() -> UIImage? {
if doc?.userProperties != nil {
return UIImage(named: "placeholder.png")
}
return nil
}
假设userProperties
可能包含您要下载的图像的URL或者图像本身,将来我们将需要稍微不同的构造...更像是这样的东西:
func getProfilePic() -> UIImage? {
guard let userProperties = doc?.userProperties else {
return nil
}
// extract the image from userProperties and return it
}
答案 1 :(得分:0)
试试这段代码示例:
func getProfilePic() -> UIImage? {
let imageName = "placeholder.png"
var image: UIImage?
if (doc.userProperties != nil) {
image = UIImage(named: imageName)
}
return image
}