Swift 中的 UIImage 返回类型



我有一个函数,如果满足条件,则返回图像,否则返回nil

- (UIImage *)getProfilePic{
    if (doc.userProperties != nil) {
        UIImage *image = [UIImage imageNamed:@"placeholder.png"];
        return image;
    } 
    else {
        return nil;
    }
}

我想转换这是在快速。我已经尝试过这个,但它在返回 nil 时显示错误,并且通过将错误显示为解包 nil 而崩溃。

func getProfilePic(){
    var image : UIImage?
    if doc!.userProperties != nil {
        image = UIImage(named: "placeholder.png")!
        return image!
    }
    else {
        return nil
    }
}

在"返回 nil"行,它显示 nil 与返回类型"uiimage"不兼容

func getProfilePic(){
    var image : UIImage?
    if doc!.userProperties != nil {
        image = UIImage(named: "placeholder.png")!
        return image!
    }
    else {
        return nil
    }
}

对,所以这里有一些问题。 首先,代码没有返回类型。 如果我们忽略你的方法的主体,只看签名,Objective-C等价物将如下所示:

- (void)getProfilePic;

所以 Swift 和 Objective-C 在这里会抱怨同样的事情:你试图返回的内容和方法的声明返回类型不匹配。

如果你对 Objective-C 比 Swift 更熟悉,所以如果你对 Swift 方法比 Swift 更熟悉,下面是

如果我们将其转换回 Objective-C 会是什么样子的 Swift 方法:

- (void)getProfilePic {
    UIImage *image;
    if (doc.userProperties) {
        image = UIImage(named: @"placeholder.png");
        return image;
    }
    else {
        return nil;
    }
}

同样,这将生成相同或相似的编译时警告或错误,因为返回类型与方法签名不匹配。 但是 Objective-C 不会因为解开nil而崩溃(但 Swift 会)。

您实际尝试返回的是一个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
}

试试这个代码示例:

 func getProfilePic() -> UIImage? {
        let imageName = "placeholder.png"
        var image: UIImage?
        if (doc.userProperties != nil) {
            image = UIImage(named: imageName)
        }
        return image
 }

最新更新