2016-10-09 6 views
7

Итак, я обновил код проекта Xcode и GitHub до swift 3.0 (мой проект находится в Obj C, а некоторые из модулей, которые я использую из GitHub, находятся в Swift). Я получил кучу ошибок, и теперь я застрял на этих. По какой-то причине мой dataSource и делегат для floatActionButton (git here) теперь не работают. Я попытался установить dataSource и delegate программно и на раскадровке, но это не сработало.cant configure dataSource и делегат

Ошибки:

недвижимости 'DataSource' не найден на объект типа 'LiquidFloatingActionButton *'

Свойство 'делегат' не найден на объект типа 'LiquidFloatingActionButton *

Я считаю, что если я выясню проблему dataSource и delegate, тогда она исправит ошибку цвета ниже.

Скриншот: enter image description here

.h:

#import <UIKit/UIKit.h> 

#import "ProductContentViewController.h" 

#import "LiquidFloatingActionButton-swift.h" 

@interface SetScreenViewController : UIViewController 



<UIPageViewControllerDataSource, LiquidFloatingActionButtonDelegate, LiquidFloatingActionButtonDataSource> 

... 

@end 

.m:

 #import "LiquidFloatingActionButton-Swift.h" 

LiquidFloatingActionButton *floatingActionButton; 
NSMutableArray *liquidCells; 
bool *closeFloatingButtons; 


NSString *videoToWatchURL; 


- (void)addLiquidButton{ 

    //Grabs the coordinates bottom right of the screen  
    float X_Co = self.view.frame.size.width - 50; 
    float Y_Co = self.view.frame.size.height - 50; 

    //i subtract 10 so the button will be placed a little bit out 
    X_Co = X_Co - 10; 
    Y_Co = Y_Co - 10; 


    //I create each cell and set the image for each button 
    liquidCells = [[NSMutableArray alloc] init]; 
    [liquidCells addObject:[[LiquidFloatingCell alloc]initWithIcon:[UIImage imageNamed:@".png"]]]; 
    [liquidCells addObject:[[LiquidFloatingCell alloc]initWithIcon:[UIImage imageNamed:@".png"]]]; 
    [liquidCells addObject:[[LiquidFloatingCell alloc]initWithIcon:[UIImage imageNamed:@".png"]]]; 
    [liquidCells addObject:[[LiquidFloatingCell alloc]initWithIcon:[UIImage imageNamed:@".png"]]]; 
    [liquidCells addObject:[[LiquidFloatingCell alloc]initWithIcon:[UIImage imageNamed:@".png"]]]; 
    [liquidCells addObject:[[LiquidFloatingCell alloc]initWithIcon:[UIImage imageNamed:@".png"]]]; 



    //Sets the floating button at the loaction provided 
    floatingActionButton = [[LiquidFloatingActionButton alloc] initWithFrame:CGRectMake(X_Co, Y_Co, 50, 50)]; 
    floatingActionButton.dataSource = self;//Error here 
    floatingActionButton.delegate = self;//and here. 

    //I set the color of the floating button 
    floatingActionButton.color = [self colorWithHexString:@"01b8eb"]; 




    //Enables the user interaction fuction to true so itll open or close 
    floatingActionButton.userInteractionEnabled = YES; 

    //Adds the flaoting button to the view 
    [self.view addSubview:floatingActionButton]; 
} 

-(NSInteger)numberOfCells:(LiquidFloatingActionButton  *)liquidFloatingActionButton{ 
    return liquidCells.count; 
} 

-(LiquidFloatingCell *)cellForIndex:(NSInteger)index{ 
    return [liquidCells objectAtIndex:index]; 
} 

PodFile:

# Uncomment this line to define a global platform for your project 
# platform :ios, '9.0' 

target 'Whats New' do 
    # Uncomment this line if you're using Swift or would like to use dynamic frameworks 
    # use_frameworks! 

    # Pods for Whats New 

    target 'Whats NewTests' do 
    inherit! :search_paths 
    # Pods for testing 
    end 

    target 'Whats NewUITests' do 
    inherit! :search_paths 
    # Pods for testing 
    end 

pod 'CRToast', '~> 0.0.7' 

pod "LiquidFloatingActionButton" 

pod 'DGActivityIndicatorView' 

pod 'M13ProgressSuite' 

pod 'SDWebImage', '~>3.8' 

pod 'FSCalendar' 

use_frameworks! 






post_install do |installer| 
    installer.pods_project.targets.each do |target| 
    target.build_configurations.each do |config| 
     config.build_settings['SWIFT_VERSION'] = '3.0' 
    end 
    end 
end 









end 

UPDATE НИЖЕ

Я закончил с использованием this проекта, потому что оригинал GitHub не фиксированы, спасибо за всю помощь, и если кто-то делает это выяснить, пожалуйста, пусть все здесь знают!

+1

Код цели-C, а не код Swift 3. – rmaddy

+0

@rmaddy a-ha! Компонент был обновлен до Swift 3.0, а не кода OP. – Paulw11

+0

@rmaddy мой проект находится в объективе c, GitHub используется в Swift. Извините, я не упоминал об этом. –

ответ

1

Я думаю, что проблема в том, что ваш код Objective-C не знает «open var» с dataSource и delegate кода LiquidFloatingButton Swift.
Чтобы сделать их известными, требуется заголовочный файл Obj-c, который предоставляет данные Swift для вашего кода Obj-C. Это подробно описано в документах Apple «Swift and Objective-C in the Same Project», в вашем случае, в частности, в разделе «Импорт внешних фреймов». Он говорит:
Вы можете импортировать базу в любой файл .m Objective-C в другой цели, используя следующий синтаксис:

@import FrameworkName; 
+0

Извините, я должен был добавить более подробную информацию в свой код. Я действительно добавил код рамки в свой проект. проверьте мой обновленный вопрос, так что смотрите. –

3

Если стремительный @protocols не определяет с @objc, то вы не можете доступ к ним в Objective-C,

например

@objc public protocol xxxxxxxxxxxDelegate { 
    func functionOne() 
    func functionSecond() 
} 
+0

Так это единственная проблема проекта GitHub? потому что я использую другие быстрые проекты GitHub в моем проекте Obj C отлично отлично –

+0

Да, возможно, вам нужно проверить файл этого проекта, в котором объявлены конкретные @protocols. –

1

ли вы добавить заголовок связующую к вашему проекту? Чтобы использовать код Swift в проекте Objective-C, вам нужен заголовок моста. Вот что нужно сделать,

1.Create новый .swift файл

2.Появится всплывающее окно и спросит «Хотели бы вы сконфигурировать заголовок моста Objective-C». Выберите Да.

3.Click на вашем Xcode файл проекта, нажмите на Строительства Настройки

4.Find панель поиска и поиск Определяет модуль.

5.Измените значение Да.

6.In App Делегат, добавьте следующее: #import "YourProjectName-swift.h"

Всякий раз, когда вы хотите использовать Swift файл необходимо добавить следующую строку:

#Import "YourProjectName-swift.h" 
+0

сделал все в этом ответе, и он по-прежнему имеет ту же ошибку –

+0

Также я использую проект GitHub, а не мои собственные быстрые файлы/делегаты. –

0

Я также использую LiquidFloatingActionButton в Swift 3 проект. Обратите внимание, что проект на git использует SnapKit для Swift 2.3, с которым мне также приходилось иметь дело, но это вне сферы действия здесь. Решение для меня было не использовать @objc public protocol, но изменить декларацию протокола следующим образом:

public protocol LiquidFloatingActionButtonDataSource { 
    func numberOfCells(_ liquidFloatingActionButton: LiquidFloatingActionButton) -> Int 
    func cellForIndex(_ index: Int) -> LiquidFloatingCell 
} 

А также:

public protocol LiquidFloatingActionButtonDelegate { 
    // selected method 
    func liquidFloatingActionButton(_ liquidFloatingActionButton: LiquidFloatingActionButton, didSelectItemAtIndex index: Int) 
} 

Только чем я мог бы успешно использовать делегирование в моей Swift 3 проекта.

+0

В моем проекте используется Objective-C, а не Swift 3.0. –

Смежные вопросы