2015-11-03 109 views
-1

我會通過下面的教程enter link description here需要了解搜索欄

目標C代碼和跨越這個代碼難倒我它是如何工作的傳來:

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 

    // find all the words wich begin with the letter: 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", searchText]; 
    // NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"contains[c] %@", searchText]; 
    self.searchResults = [self.array filteredArrayUsingPredicate:predicate]; 
} 






-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 

    // update the tableview 

{ 


    [self filterContentForSearchText:searchString 


     scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar 


                selectedScopeButtonIndex]]]; 


    return YES; 


} 

我不部分理解是:

scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]]; 

這是我的理解,我試圖研究它,我知道範圍的一個參數。但我現在需要一些解釋這個作品。

+1

嗯,你不能孤立地說。你在引用一行。該行是:[self filterContentForSearchText:searchString scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];'你不能孤立地拿一塊,並詢問它;它本身沒有意義。你的問題就像問:「嗨,你好嗎?」 – matt

回答

0

這是一個複合語句。用這種方式寫它會使它更難理解。

我傾向於使用更簡單的語句和臨時變量,以使代碼更容易遵循。 (這也使得調試更加容易,因爲你可以在中間步驟之間設置斷點並檢查這些臨時變量。)

原:

[self 
    filterContentForSearchText:searchString 
    scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
    objectAtIndex: 
    [self.searchDisplayController.searchBar selectedScopeButtonIndex]]]; 

可細分如下:

//Get the search bar's array of button titles 
NSArray *titlesArray = 
    [self.searchDisplayController.searchBar scopeButtonTitles]; 

//Get the index of the selected scope button 
NSInteger index = 
    [self.searchDisplayController.searchBar selectedScopeButtonIndex]; 

//Fetch the string at that index. 

NSString *scopeString = titlesArray[index]; 

//Now assign the string. 
[self 
    filterContentForSearchText: searchString 
    scope: scopeString]; 

看看你是否可以將轉換成Swift。如果不回覆問題。

(我不熟悉的幾個在原來代碼中使用。我在調查基礎上簡單地分析您發佈的Objective-C代碼是怎麼回事一些假設的功能。)