在Swift中返回UIImage的类型

时间:2016-02-29 12:59:30

标签: objective-c swift uiimage

我有一个函数,如果条件满足则返回图像,否则返回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'

2 个答案:

答案 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
 }