• iOS 谓词讲解


    1、NSPredicate

    (1)比较运算符 

    1.比较运算符 > 、< 、== 、 >= 、<= 、 !=

    运算符还可以跟逻辑运算符一起使用,&&  ,  || ,AND, OR 谓词不区分大小写

    NSPredicate *p = [NSPredicate predicateWithFormat:@"age >= 18 && name = '周周'"];   

    //根据谓词要求返回响应数组

    NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];

    //    [self.dataList filterUsingPredicate:p];

    (2)范围运算符

    IN:等于SQL的IN操作,左边的表达必须出现在右边指定的集合中。 

    BETWEEN:左边的表达式等于右边的表达式的值或者介于它们之间,右边是一个有两个指定上限和下限的数值的数列(指定顺序的数列)

    NSPredicate * p = [NSPredicate predicateWithFormat:@"age BETWEEN {30,60}"];

    NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];

    (3)头尾查询

    以xx开头 --BEGINSWITH

    以xx结尾 --ENDSWITH

        NSPredicate * p = [NSPredicate predicateWithFormat:@"name BEGINSWITH '大' || name ENDSWITH %@",@"露"];    

        NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];

    (4)包含查询

    包含CONTAINS:左边的表达式包含右边的表达式。

    NSPredicate * p = [NSPredicate predicateWithFormat:@"%K CONTAINS %@",@"name",@"欢”];

    NSPredicate * p = [NSPredicate predicateWithFormat:@"%K CONTAINS '欢'",@"name"];

        NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];

    (5)     模糊查询

         LIKE:左边的表达式等于右边的表达式

         *表示零个或多个字符

         ?表示一个字符

        //    NSPredicate * p = [NSPredicate predicateWithFormat:@"name LIKE '*欢*'"];

        NSPredicate * p = [NSPredicate predicateWithFormat:@"name LIKE '?欢*'"];

            NSArray * personList = [self.dataList filteredArrayUsingPredicate:p];

    (6)字符串本身查询    

    //字符串本身查询,数组里的每一项是字符串,才能用SELF查询

        

        NSArray * names = @[@"大欢",@"周周",@"露露",@"饭饭",@"欢哥"];

        

        //    NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF = '大欢'"];

        

        NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF CONTAINS %@",@"欢"];

        NSArray * personList = [names filteredArrayUsingPredicate:p];

    (7)正则表达式:MATCHES

        NSString *pattern = @"^((13[0-9])|(15[^4,\D])|(18[0,0-9]))\d{8}$";

        NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",pattern];

        

        //传入对象是否匹配正则表达式的谓词

        BOOL isTelNumber = [p evaluateWithObject:@"118260930"];

        

        if (isTelNumber) {

            NSLog(@"是手机号");

        } else {

            NSLog(@"不是手机号");

        }    

    2、UISearchController搜索控制器

    (1)第一种形式  

      //创建一个接受结果并展示的表格控制器

        SearchResultViewController * resultVC = [[SearchResultViewController alloc] initWithStyle:UITableViewStylePlain];

        //创建搜索控制器

        UISearchController * searchVC = [[UISearchController alloc] initWithSearchResultsController:resultVC];

        //设置数据更新代理

        searchVC.searchResultsUpdater = self;

        //使用模态视图跳转到搜索控制器

        [self presentViewController:searchVC animated:YES completion:nil];    

        //通过searchBar得到输入的文字

        NSString * searchString = searchController.searchBar.text;

        

        //过滤搜索内容

        [self updateFilterContent:searchString];

        

        //self.resultList已经有搜索到的值了

        //判断是否searchController存在searchResultsController

        if (searchController.searchResultsController) {

            

            //通过searchResultsController得到SearchResultViewController的引用

             SearchResultViewController * searchResultVC = (SearchResultViewController *)searchController.searchResultsController;        

    //给搜索结果控制器赋数据源

    searchResultVC.searchResults = self.resultList;        

    //将搜索结果控制器刷新表格

    [searchResultVC.tableView reloadData];

    - (void)updateFilterContent:(NSString *)searchString {

        

        //[c] 不区分大小写

        

        NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF CONTAINS[c] %@",searchString];

        

        self.resultList = [self.dataList filteredArrayUsingPredicate:p];

        

    }

    (2)第二种形式

    #warning 一定要将UISearchController对象设置成全局变量

        self.tableView.tableHeaderView = self.searchVC.searchBar;

    并将button响应事件 放在viewDidLoad中
  • 相关阅读:
    翻译「C++ Rvalue References Explained」C++右值引用详解 Part5:右值引用就是右值吗?
    翻译「C++ Rvalue References Explained」C++右值引用详解 Part4:强制Move语义
    翻译「C++ Rvalue References Explained」C++右值引用详解 Part3:右值引用
    翻译「C++ Rvalue References Explained」C++右值引用详解 Part2:Move语义
    python第一部分基础题1-80题
    django rest_framework 框架的使用03
    django rest_framework 框架的使用02
    django rest_framework 框架的使用
    Django ORM-02
    Django ORM-01
  • 原文地址:https://www.cnblogs.com/PSSSCode/p/5272035.html
Copyright © 2020-2023  润新知