0

既に ObjC があるプロジェクトで、Swift クラスを追加しています

import AddressBookUI
class MyVC : UITableViewController, ABPeoplePickerNavigationControllerDelegate {
}

MyApp-Swift.h:289:42: 'ABPeoplePickerNavigationControllerDelegate' のプロトコル宣言が見つかりません。「UINavigationControllerDelegate」のことですか?

いいえ、スウィフト、私は本当にABPeoplePickerNavigationControllerDelegate. ここで何が間違っているのか本当に疑問に思っています...

4

4 に答える 4

1

FWIW、これABRecordが純粋な Swift では機能するが、Objective-C 互換ヘッダーでは機能しない理由はtypealias、後者が明らかに正しく変換されない があるためです。

typealias ABRecordRef = ABRecord

https://developer.apple.com/library/prerelease/ios/documentation/AddressBook/Reference/ABRecordRef_iPhoneOS/index.html#//apple_ref/c/tdef/ABRecordRefを参照してください

レーダーを提出する価値があるかもしれません

于 2015-03-25T13:03:15.893 に答える
1

ここで使用したコードを確認できます

Pure Swift プロジェクト、Objective-C は関係ありません

私にとって、これはブリッジングヘッダーを使用せずに正常にコンパイルされています

import UIKit
import AddressBook
import AddressBookUI

class ViewController: UITableViewController, ABPeoplePickerNavigationControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {


    }
}

関連するフレームワーク (AddressBook、AddressBookUI) を、ターゲットのライブラリフェーズを使用したリンク バイナリに追加しています。

関連するフレームワークを追加する

ブリッジ ヘッダーを使用した Objective-C プロジェクト

私のブリッジング-Header.h:

#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
  • Bridging-Header がターゲットで適切に参照されていることを確認してください

ブリッジング ヘッダー

  • Swift VCコードは上記と同じです
于 2015-03-25T11:14:28.190 に答える
0

Twitter の @neonacho のおかげで、 2 つ目の問題を修正できました。代わりに、コンパイルに使用する必要がありました。ディエゴのコードが機能し、私のコードが機能しない理由がわかりません。だからこうなったABRecordABRecordRef

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, 
                                      didSelectPerson person: ABRecordRef!, property: ABPropertyID, identifier: ABMultiValueIdentifier) {
}

そしてそれは動作します。

于 2015-03-25T12:56:09.823 に答える