ios swift 知识点记录

 

1. 定义变量 var name = "***"

    定义常量 let name ="*****"

2. swift 变量类型  String, Int, Float, Double

3. swift 逻辑操作符   &&  , ||, !

4. swift 关系运算符 ==, !=, >=, <=

5. swift storyboard界面元素跟code绑定,右键(button , label什么的),左键按住划线到view, 选择对应的code 里的variable or 方法

6. swift 定义类似静态函数: class func methodName() -> type {}

    静态变量: static var  name:type =  **** 调用的时候,是className.name() 这样的方式

7. var xxx = Object!  意思是显示转换, “!”代表这个有可能没有值

8. 实例化: myStation = RadioStation.init(name: "KZZP", frequency: 104.7) 或   myStation = RadioStation()

9. 创建新Class, 需要在IDE选Cocoa Touch Class

10.Stretching label, 是自动拉伸,否则,会截断text内容

11.给storyboard 上的button添加方法的另一种操作

12. 数组定义 var myArray: [string] = ["One", "Two"] print(myArray[0])  数组长度:myArray.count  数组扩展:myArray.append("Three"), myArray += ["Four","Five"], myArray.insert("Zero", at: 0) 删除: myArray.remove(at: **)

13. for 循环

     for  y in 0 .. <numbers{

     }

14. 日期比较  today.compare(date)

15. ios preference 存储 

let prefs: UserDefaults = UserDefaults.standard
prefs.set("sherlock.holmes", forKey: "username")
prefs.set(10, forKey: "booksInList")
prefs.synchronize()

let username = prefs.string(forKey: "username")
let booksInList = prefs.integer(forKey: "booksInList")
 
16. core data (example code)
复制代码
import CoreData
class ViewController: UIViewController, UITableViewDelegate, 
UITableViewDataSource {
var managedObjectContext: NSManagedObjectContext! //managed object context

func tableView(_ tableView: UITableView, numberOfRowsInSection section: 
Int) -> Int{return 1}

override func viewDidLoad(){
let appDelegate: AppDelegate = UIApplication.shared.delegate as! 
AppDelegate
managedObjectContext = appDelegate.persistentContainer.viewContext as NSManagedObjectContext
//将contextObject 链接到appDelegate
}

func loadBooks() -> [Book] {
 let fetchRequest: NSFetchRequest<Book> = Book.fetchRequest()
 var result: [Book] = []
 do {
 result = try managedObjectContext.fetch(fetchRequest)
 } catch {
 NSLog("My Error: %@", error as NSError)
 }
 return result
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: 
Int) -> Int {
 return loadBooks().count
 }func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
IndexPath) -> UITableViewCell {
 guard let cell = tableView.dequeueReusableCell(withIdentifier: 
"Cell") else { return UITableViewCell() }
 let book: Book = loadBooks()[indexPath.row]
 cell.textLabel?.text = book.title
 return cell
}

@IBAction func addNew(_ sender: Any) {
 let book: Book = NSEntityDescription.
insertNewObject(forEntityName: "Book", into: 
managedObjectContext) as! Book
 book.title = "My Book" + String(loadBooks().count)
 do {
 try managedObjectContext.save()
 } catch let error as NSError {
 NSLog("My Error: %@", error)
 }
 myTableView.reloadData()
}
//根据实体名查询
let fetchRequest = NSFetchRequest(entityName: "People")
//设置查询条件
let predicate = NSPredicate(format:"id=1 and / or / not name='xx'")
fetchRequest.predicate=predicate

  do {

    let peopleList = try context.executeFetchRequest(fetchRequest)as! [NSManagedObject]

    for person in peopleListas! [People] {
      print("查询到的人是\(person.name!)")
      //修改操作:将查询到的结果修改后,再调用context.save()保存即可
      if (person.name =="小红"){
         person.name="小花"
      }
       //删除操作:将查询到的额结果删除后,再调用context.save()保存即可
      if (person.name =="小明"){
        context.deleteObject(person)
      }
    }
    }catchlet error{

            print("context can't fetch!, Error:\(error)")


        }


       do {


           try context.save()


           print("保存成功")


        }catch let error{


            print("context can't save!, Error:\(error)")


        }

 
复制代码

CoreData 多表

多表查询: https://blog.csdn.net/fengsh998/article/details/8123392?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

多条件查询:

https://blog.csdn.net/qq_29892943/article/details/52765344?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase

CoreData中实体关联关系有三种,一对一,一对多,多对多,举一个简单的例子Accoun和Order之间关系.一个账户有多个订单

图中的RelationShip有三个字段,关联关系的名称,对应的Destination目标表的名字,Inverse表示反向关系,如果没有就是No Inverse.苹果关系建议是为了保证数据之间的一致性,最好设置反向关系.每个Order对应单一的用

户.


 

设置关联之后还需要设置对应的删除规则(Delete Rule),苹果默认的关联规则是Nullify:


 

Deny 关系的Destination中只要有一个对象,就不能删除,如果账户还有订单,就不能删除账户

Nullify 只在逆向关系Optional的时候有效,Accout 删除之后,所有的Order中的account信息设置为nil

Cascade 删除对象后,删除destination所有对象.Account删除之后,会删除所有对应的Order对象.

NoAction 删除对象后,对Destination不做任何操作,在Destination中有大量对象的时候有用

设置关联关系,新建立一个订单,设置Order的关联对象是Account:

复制代码
do {

            let account:Account = Account.findAccountByName(name: "FlyElephant")!
            
            let privateContext:NSManagedObjectContext = try CoreDataManager.sharedManager.newPrivateQueueContextWithNewPSC()
            
            let order:Order = NSEntityDescription.insertNewObject(forEntityName: "Order", into: privateContext) as! Order
            order.orderName = "台湾小零食--\(1)"
            order.orderNumber = Int32(100)
        
            order.account = account
            
            if privateContext.hasChanges {
                do {
                    print("保存成功")
                    try privateContext.save()
                } catch {
                    let nserror = error as NSError
                    fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
                }
            }
        }  catch {
            print(error)
        }
复制代码

Account和Order不在同一个Context上下文中,会出现错误,可以在同一个上下文中进行实体对象查询

复制代码
static func findAccountByName(name:String) -> Account? {
        
        let context:NSManagedObjectContext = CoreDataManager.sharedManager.mainQueueContext
        
        let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Account")
        
        let predicate = NSPredicate.init(format: " accountName = %@", name)
        fetchRequest.predicate = predicate
        
        do {
            let searchResults = try context.fetch(fetchRequest)
            if searchResults.count > 0 {
                let account:Account = searchResults[0] as! Account
                return account
            } else {
                return nil
            }
        } catch  {
            print(error)
        }
        
        return nil
    }
复制代码

 

 
复制代码
do {

            let account:Account = Account.findAccountByName(name: "FlyElephant")!
            
            let privateContext:NSManagedObjectContext = try CoreDataManager.sharedManager.newPrivateQueueContextWithNewPSC()
            
            let order:Order = NSEntityDescription.insertNewObject(forEntityName: "Order", into: privateContext) as! Order
            order.orderName = "FlyElephant-台湾小零食--\(1)"
            order.orderNumber = Int32(100)
        
            let accountInContext:Account = privateContext.object(with: account.objectID) as! Account
            order.account = accountInContext
            
            if privateContext.hasChanges {
                do {
                    print("保存成功")
                    try privateContext.save()
                } catch {
                    let nserror = error as NSError
                    fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
                }
            }
        }  catch {
            print(error)
        }
复制代码

 占位符:
NSPredicate *preTemplate = [NSPredicate predicateWithFormat:@"name==$NAME"];
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys:
@"Name1", @"NAME",nil];
NSPredicate *pre=[preTemplate predicateWithSubstitutionVariables: dic];

 

 分页查询

 

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"RSSEntryModel" inManagedObjectContext:_managedObjectContext];
[request setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"articleDate" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[request setFetchLimit:21];
[request setFetchOffset:_currentPage * 21];
NSArray *rssTemp = [_managedObjectContext executeFetchRequest:request error:&error];

 

17  Protocols and Delegates

 

Protocol Definition
protocol RandomNumberGenerator {
 var mustBeSettable: Int { get set }
 var doesNotNeedToBeSettable: Int { get }
 func random() -> Double
}
复制代码
 import UIKit
 // protocol used to send data back to the home view controller's 
userDidFinish
protocol GuessDelegate {
func userDidFinish(_ controller:GuessInputViewController, guess: 
String)
}
class GuessInputViewController: UIViewController {
 var delegate: GuessDelegate?
 var previousGuess: String = ""

 @IBOutlet weak var guessLabel: UILabel!
 @IBOutlet weak var guessTextField: UITextField!

 override func viewDidLoad() {
 super.viewDidLoad()

 // Do any additional setup after loading the view.
 if(!previousGuess.isEmpty) {
 guessLabel.text = "Your previous guess was \(previousGuess)"
 }
 guessTextField.becomeFirstResponder()
 }
@IBAction func saveGuess(_ sender: AnyObject) {
if let delegate = delegate, let guessText = guessTextField.text {
delegate.userDidFinish(self, guess: guessText)
}
}
}
复制代码

protocol  XXXDelegate{ func methodA(data)}

classA{

var objectA: XXXDelegate? = nil

objectA.methodA(data)

}

classB : XXXDelegate{

func methodA(data){}

}

这样就实现了两个Controller之间的数据传递

 

posted @   modentime  阅读(281)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示