获取联系人图像-SwiftUI

问题描述

我正在尝试获取给定contact图片属性。这是我得到的:

模型

struct Contact: Identifiable {
    let contact: CNContact

    var id: String { contact.identifier }
    var image: Data? { contact.imageData }
    var givenname: String { contact.givenname }
}

static func fetch(_ completion: @escaping(Result<[Contact],Error>) -> Void) {
    let containerID = CNContactStore().defaultContainerIdentifier
    let predicate = CNContact.predicateForContactsInContainer(withIdentifier: containerID())
        
    let keysToFetch = [
        CNContactimageDataKey,CNContactimageDataAvailableKey,CNContactThumbnailImageDataKey,CNContactGivennameKey,CNContactFamilyNameKey,CNContactPhoneNumbersKey,CNContactEmailAddressesKey
     ] as [CNKeyDescriptor]
        
     do {
        let contacts = try CNContactStore().unifiedContacts(matching: predicate,keysToFetch: keysToFetch)
        completion(.success(contacts.map({ .init(contact: $0)})))
     } catch {
        completion(.failure(error))
     }
}

查看

struct ContactRow: View {
    let contact: Contact
    
    var body: some View {
        vstack {
            HStack {
                Image(String(describing: contact.image))
                    .resizable()
                    .aspectRatio(contentMode: .fill)
                    .frame(width: 50,height: 50)
                    .background(AppColor())
                    .clipShape(Circle())
                    .shadow(color: Color.black.opacity(0.1),radius: 1,x: 0,y: 1)
                    .shadow(color: Color.black.opacity(0.2),radius: 10,y: 10)
                
                Text(contact.givenname)
                    .font(.headline)
                    .foregroundColor(Color(#colorLiteral(red: 0.2549019754,green: 0.2745098174,blue: 0.3019607961,alpha: 1)))

            }
        } 
    }
}

我得到的错误是紫色,然后说

运行时:SwiftUI:在/ private / var / containers / Bundle / Application / ... etc

的资产目录中找不到名为“ Optional(38321字节)”的图像

很明显,我在Apple提供的Contacts应用中有联系人图像。

有什么想法吗?

解决方法

您的联系人图片为InputDf= spark.read.format("jdbc")\ .option("url","jdbc:sqlserver://LAPTOP-xxxxx:1433;database=Demoxxxxx")\ .option("dbtable","dbo.DemoTb")\ .option("user","xxxxxx")\ .option("password","xxxxxxxxx")\ .option("driver","com.microsoft.sqlserver.jdbc.SQLServerDriver")\ .load() ,因此您应该以不同的方式创建Data,例如

Image