swift头文件找不到'CNContactPickerDelegate'的协议声明

Posted

技术标签:

【中文标题】swift头文件找不到\'CNContactPickerDelegate\'的协议声明【英文标题】:swift header file cannot find protocol declaration for 'CNContactPickerDelegate'swift头文件找不到'CNContactPickerDelegate'的协议声明 【发布时间】:2018-04-25 15:45:09 【问题描述】:

我正在尝试添加与此问题相关的足够代码和信息。

我想使用本地联系人列表来获取电话号码。所以,我更喜欢使用 ios9 及更高版本支持的“联系人”框架。

当我将这些委托方法添加到我的代码时。我从 Swift 头文件(ProjectName-Swift.h 文件)中收到错误消息。我在谷歌上搜索,但没有找到任何解决方案。我很确定,“联系人”框架导致了“导入循环”问题。有人有什么建议吗?

// Calling CNContactPickerViewController method

func clickedAdressBook() 
    let contactPicker = CNContactPickerViewController()
    contactPicker.delegate = self
    self.present(contactPicker, animated: true, completion: nil)


// to handle ContactsDelegate delegate metods

extension MoneyTransferToGsmVC : ContactsDelegate 

为了解决这个问题,我创建了从 CNContactPickerDelegate 扩展而来的新协议。但是没用

    import UIKit
import Foundation
import Contacts
import ContactsUI

protocol ContactsDelegate : CNContactPickerDelegate 


当我添加上述扩展时,我遇到了错误。

【问题讨论】:

信息不足。请不要只显示代码中的一些点点滴滴。找出所有重现问题所需的代码并显示它。 (例如,创建一个普通的新项目并添加足够的代码来自己重现问题,然后描述或发布该项目。) 嗨@matt,我无法粘贴所有代码/项目。我尝试用代码截断、屏幕截图和表达式来解释我的问题。我认为,您无法重现此问题,因为它的相关项目文件是“导入循环”。如果您想了解具体信息,可以询问。 我确实问过了。您使用了很多没有解释的类型名称。解释他们。 我添加了从 CNContactPickerDelegate 扩展而来的 ContactsDelegate 协议。 您希望 MoneyTransferToGsmVC 了解 ContactsDelegate 的问题吗?但它不能,因为你没有标记它@objc。您的扩展名也是如此。没有标记 @objc 的内容对 Objective-C 是隐藏的。 【参考方案1】:

我找到了解决办法。

我知道,这个答案不是一个好的选择。但这对我有用。

首先创建一个新的 .h 文件来复制“Swift Header File”。就我而言,我创建了“ProjectName-SwiftFixed.h”。

然后,我在我的代码中使用 #import "ProjectName-SwiftFixed.h" 而不是 #import "ProjectName-SwiftFixed.h"。

【讨论】:

以上是关于swift头文件找不到'CNContactPickerDelegate'的协议声明的主要内容,如果未能解决你的问题,请参考以下文章

找不到 Swift 到 Objective C 头文件

Xcode 找不到 ProductModuleName-Swift.h

qtcreator头文件中的结构体找不到

找不到QT的头文件怎么办?

在命名空间/头文件中找不到类

我include自己的头文件,编译器却提示找不到,大家帮忙看看怎么回事好么?