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()
import CoreData
class ViewController: UIViewController, UITableViewDelegate,
UITableViewDataSource {
var managedObjectContext: NSManagedObjectContext! //managed object context func tableView(_ tableView: UITableView, numberOfRowsInSection section:
Int) -> Int{return } 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 多表
多条件查询:
CoreData中实体关联关系有三种,一对一,一对多,多对多,举一个简单的例子Accoun和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 > {
let account:Account = searchResults[] 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()
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之间的数据传递
ios swift 知识点记录的更多相关文章
- iOS小知识点记录
1.创建视图的两种方法:用代码创建视图,创建XIB文件.如何决定使用哪种方法?参考法则:如果视图没有子视图,就用代码创建:如果有子视图,就通过XIB文件创建. 2.创建视图的时候,视图控制器会调用lo ...
- iOS Swift WisdomScanKit图片浏览器功能SDK
iOS Swift WisdomScanKit图片浏览器功能SDK使用 一:简介 WisdomScanKit 由 Swift4.2版编写,完全兼容OC项目调用. WisdomScanKit的 ...
- C#知识点记录
用于记录C#知识要点. 参考:CLR via C#.C#并发编程.MSDN.百度 记录方式:读每本书,先看一遍,然后第二遍的时候,写笔记. CLR:公共语言运行时(Common Language Ru ...
- iOS开发之记录用户登录状态
iOS开发之记录用户登录状态 我们知道:CoreData的配置和使用步骤还是挺复杂的.但熟悉CoreData的使用流程后,CoreData还是蛮好用的.今天要说的是如何记录我们用户的登陆状态.例如微信 ...
- spring mvc开发过程知识点记录
给一个客户做的一个小项目,需求就是输入类似一个短网址http://dd.yy/xxxx然后跳转到另外一个域名下的图书文件.(实际很多短网址站都提供API供调用吧,不过客户需求是他自己建立一个短网址服务 ...
- javascript知识点记录(1)
javascript一些知识点记录 1.substring,slice,substr的用法 substring 和slice 都有startIndex 和 endIndex(不包括endInex),区 ...
- iOS 常见知识点(三):Lock
iOS 常见知识点(一):Runtime iOS 常见知识点(二):RunLoop 锁是最常用的同步工具.一段代码段在同一个时间只能允许被有限个线程访问,比如一个线程 A 进入需要保护代码之前添加简单 ...
- JavaScript算法与数据结构知识点记录
JavaScript算法与数据结构知识点记录 zhanweifu
- iOS swift的xcworkspace多项目管理(架构思想)
iOS swift的xcworkspace多项目管理(架构思想) 技术说明: 今天在这里分享 swift下的 xcworkspace多项目管理(架构思想),能为我们在开发中带来哪些便捷?能为我们对整 ...
随机推荐
- channelartlist标签的使用
用来获取当前频道的下级栏目的内容列表标签 . type=“top”表示顶级栏目 ,typeid='top' 限制上级栏目ID:如果只要调用其中几个频道的内容可以用{dede:channelartlis ...
- PHP文件目录操作
目录操作 is_dir ( $path ) 判断当前路径是否为目录 ,返回布尔 opendir ( $path ) 打开路径目录,返回资源 readdir ( $handle ) 读取当前打开目录下一 ...
- 【Leetcode】560. 和为K的子数组&974. 和可被 K 整除的子数组(前缀和+哈希表)
public class Solution { public int subarraySum(int[] nums, int k) { int count = 0, pre = 0; HashMap ...
- JavaScript变量语法扩展
1.更新变量 一个变量被重新赋值后,它原有的值会被覆盖,变量值将会以最后一次赋值为准. 2.同时声明多个变量 var age = 18 , address ='火影村' , gz = 2000 ; ...
- 需求:一个页面中需要用到多个字典数据。用于下拉选项,同时,需要将其保存为json格式。以便于key,value的相互转换。记录在实现过程中踩的坑
本文涉及到的知识: Promise,all()的使用 js处理机制 reduce的用法 map的用法 同步异步 需求: 一个页面中需要用到多个字典数据.用于下拉选项,同时,需要将其保存为json格式. ...
- [Python基础]003.语法(2)
语法(2) 运算符 数学运算 比较运算 逻辑运算 位运算 赋值运算 其他运算 代码规范 代码缩进 多行 注释 流程控制 pass if while for break continue 运算符 数学运 ...
- Rocket - diplomacy - ValName
https://mp.weixin.qq.com/s/so-2x5KLfYF0IMCCqNThwQ 简单调试ValName实现: 1. 使用 Desugar之后如下: ...
- 基础数论——EXGCD
1.前言 \(皆さん.こんにちは.\)今天我们来讲 \(EXGCD\) .(扩展欧几里得) 既然是扩展嘛,那肯定有不扩展的,也就是 \(GCD\) . 我们都知道 \(GCD\) 怎么写: ll GC ...
- js匿名函数和date对象,math对象
匿名函数: <script type="text/javascript"> function (参数列表){ 要执行的语句块; } </script> 对象 ...
- Java实现 LeetCode 770 基本计算器 IV(暴力+分析题)
770. 基本计算器 IV 给定一个表达式 expression 如 expression = "e + 8 - a + 5" 和一个求值映射,如 {"e": ...