Swift 学习中的一点体会,不断更新中。。。
随着Xcode 8的发布,swift 3.0终于来了。又有一大批api名字发生了变化。但是感觉3.0之后的变化应该会小些,因此再重新仔细学习一下。
1. 关于swift引入的Computed Properties概念。
今天看了Salesforce的sdk,发现了如下的demo代码:
#import "SObjectData.h"
@interface SampleRequestSObjectData : SObjectData
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *contactId;
@property (nonatomic, copy) NSString *contactName;
@property (nonatomic, copy) NSString *productId;
@property (nonatomic, copy) NSString *productName;
@property (nonatomic, copy) NSString *deliveryDate;
@property (nonatomic, copy) NSNumber *quantity;
@property (nonatomic, copy) NSString *status;
@property (nonatomic, copy) NSDictionary *authorizedUsers;
@property (nonatomic, copy) NSArray *userRecords;
@property (nonatomic, copy) NSArray *attachments;
@end
//
// SampleRequestSObjectData.m
// SFDCOfflinePoc
//
// Created by PAULO VITOR MAGACHO DA SILVA on 1/24/16.
// Copyright © 2016 Topcoder Inc. All rights reserved.
//
#import "SampleRequestSObjectData.h"
#import "SampleRequestSObjectDataSpec.h"
#import "SObjectData+Internal.h"
#import <SmartSync/SFSmartSyncConstants.h>
@implementation SampleRequestSObjectData
+ (SObjectDataSpec *)dataSpec {
static SampleRequestSObjectDataSpec *sDataSpec = nil;
if (sDataSpec == nil) {
sDataSpec = [[SampleRequestSObjectDataSpec alloc] init];
}
return sDataSpec;
}
#pragma mark - Property getters / setters
- (NSString *)name {
return [self nonNullFieldValue:kSampleRequestNameField];
}
- (void)setName:(NSString *)name {
[self updateSoupForFieldName:kSampleRequestNameField fieldValue:name];
}
- (NSString *)contactId {
return [self nonNullFieldValue:kSampleRequestContactField];
}
- (void)setContactId:(NSString *)contactId {
[self updateSoupForFieldName:kSampleRequestContactField fieldValue:contactId];
}
- (NSString *)contactName {
return [[self nonNullFieldValue:kSampleRequestContactQueryField] objectForKey:@"Name"];
}
- (NSString *)productId {
return [self nonNullFieldValue:kSampleRequestProductField];
}
- (void)setProductId:(NSString *)productId {
[self updateSoupForFieldName:kSampleRequestProductField fieldValue:productId];
}
- (NSString *)productName {
return [[self nonNullFieldValue:kSampleRequestProductQueryField] objectForKey:@"Name"];
}
- (NSString *)deliveryDate {
return [self nonNullFieldValue:kSampleRequestDeliveryDateField];
}
- (void)setDeliveryDate:(NSString *)deliveryDate {
[self updateSoupForFieldName:kSampleRequestDeliveryDateField fieldValue:deliveryDate];
}
- (NSString *)quantity {
return [self nonNullFieldValue:kSampleRequestQuantityField];
}
- (void)setQuantity:(NSString *)quantity {
[self updateSoupForFieldName:kSampleRequestQuantityField fieldValue:quantity];
}
- (NSString *)status {
return [self nonNullFieldValue:kSampleRequestStatusField];
}
- (void)setStatus:(NSString *)status {
[self updateSoupForFieldName:kSampleRequestStatusField fieldValue:status];
}
- (NSDictionary *)authorizedUsers {
return [self nonNullFieldValue:kSampleRequestAuthorizedUsersField];
}
- (void)setAuthorizedUsers:(NSDictionary *)authorizedUsers {
[self updateSoupForFieldName:kSampleRequestAuthorizedUsersField fieldValue:authorizedUsers];
}
- (NSArray *)attachments {
return [self nonNullFieldValue:kSampleRequestAttachmentsField];
}
- (void)setAttachments:(NSArray *)attachment {
[self updateSoupForFieldName:kSampleRequestAttachmentsField fieldValue:attachment];
}
- (NSArray *) userRecords {
int totalSize = [[self.authorizedUsers objectForKey:@"totalSize"] intValue];
) {
return [self.authorizedUsers objectForKey:@"records"];
}
return nil;
}
@end
通过代码,可以看出,声明的几个@property 其实没有对每个property对应的真实变量进行读写操作,而是通过自定义的get,set方法对其他的数据进行操作,但是系统会不会自动建立那些没用的真实变量呢?从代码上是看不出了。而且从声明的地方也看不出这些property的特殊性,不注意还真容易误解。
swift的Computed Properties,解决了这个问题:
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / )
let centerY = origin.y + (size.height / )
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x - (size.width / )
origin.y = newCenter.y - (size.height / )
}
}
}
这里的center,有自定义的get,set方法,就明确地指出了它的目的不是为了保存一个值,而是“provide a getter and an optional setter to retrieve and set other properties and values indirectly.”
这个写法就比以前的oc写法要好上很多啊!
Swift 学习中的一点体会,不断更新中。。。的更多相关文章
- java 学习必备的软件,持续更新中
小编会持续更新在学习Java过程中需要的软件以及各种文件: 话不多说,看行动! 一:JDK (1)JDK1.8(*64): 链接:https://pan.baidu.com/s/1vM0jNXn2CT ...
- 学习java的一点体会
在这几天的做实验.读书.写笔记的过程中我发现一个问题,就是我的知识面太窄,就比如说,学的知识都是一块一块的,没有能力去把它串起来,虽然学的很快,也写笔记总结,但马上就忘了,我想java是一个体系,需要 ...
- 【学习笔记】splay入门(更新中)
声明:本博客所有随笔都参照了网络资料或其他博客,仅为博主想加深理解而写,如有疑问欢迎与博主讨论✧。٩(ˊᗜˋ)و✧*。 前言 终于学习了 spaly \(splay\) !听说了很久,因为dalao总 ...
- Windows批处理命令学习中遇到的坑--持续更新中
再次拾起windows批处理命令,下边将一些遇到的小问题写出来,希望可以帮到大家 1.set命令:set主要的作用是为变量赋值,类似于编程语言中的var i = Value:但是在使用的过程中一定要注 ...
- SqlServer学习-常用的sql语句-持续更新中
1.获取数据库下的所有表名 select TABLE_NAME from information_schema.tables where TABLE_TYPE='Base TABLE' 2.随机取出1 ...
- Vue.js2.0中的变化(持续更新中)
最近自己在学习Vue.js,在看一些课程的时候可能Vue更新太块了导致课程所讲知识和现在Vue的版本不符,从而报错,我会在以后的帖子持续更新Vue的变化与更新,大家也可以一起交流,共同监督学习! 1. ...
- linux工作中遇到的问题总结---更新中
今天这个,严格来说不算一篇文章,我只想把我工作中遇到的问题分享给大家,让大家少犯错误. 1.安装rmp包时出现错误 :header V3 DSA signature: nokey ,key id .. ...
- linux中操作k8s的基本命令-更新中
linux中操作k8s的基本命令 最近工作中使用到了k8s,那么就来总结下平时使用到的基本的命令 获取某个namespace下的pod 获取某个namespace下的pod,展示出ip和pod信息 查 ...
- Kotlin教程——史上最全面、最详细的学习教程,持续更新中....
关于这个系列教程,我是从最基础的开发环境搭建到项目进阶到后面的项目开发这个过程来写的.我一直秉承从实际项目开发以及源码解析的角度去写好这个教程,并让从未接触过编程的朋友能学好kotlin这门语言.所以 ...
随机推荐
- Python小白的发展之路之Python基础(一)
Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...
- 1229【MySQL】性能优化之 Index Condition Pushdown
转自http://blog.itpub.net/22664653/viewspace-1210844/ [MySQL]性能优化之 Index Condition Pushdown2014-07-06 ...
- 基于bootstrap样式的tree,
<!doctype html><html lang="zh"><head> <meta charset="UTF-8" ...
- insmod模块的几种常见错误
1. 与内核版本不一致 嵌入式开发时,模块编译时需要制定内核的路径,内核的版本信息会加入到模块文件中,如果目标板上运行的内核与模块中包含的内核版本对不上,加载就会出错,报如下错误: insmod i ...
- curl的登录总结
demo1 <?php $curl=curl_init('http://www.baidu.com'); curl_exec($curl); curl_close($curl); ?> c ...
- KMP算法实现
链接:http://blog.csdn.net/joylnwang/article/details/6778316 KMP算法是一种很经典的字符串匹配算法,链接中的讲解已经是很明确得了,自己按照其讲解 ...
- 封装一个函数获取匹配特定的css选择符
function $$(selector,context){ context=context||document; var elements=context.querySelectorAll(sele ...
- django缓存优化中caches参数如何配置?
在python开发中,如果运营django进行编写,为了提升效率,常常需要优化缓存,缓存优化中必须掌握的caches参数相关知识: CACHES 配置参数概述 - 格式 CACHES 字典配置格式如下 ...
- leetcode
Coding on LeetCode Online Judge leetcode(leetcode website) Problems algorithms 13. Roman to Integer ...
- MVC5知识点记录
IIS/ASP.NET管道 原理永远是重中之重,所以在开篇的地方,先了解一下地址栏输入网址回车之后的故事. 不同IIS版本处理请求也不一样 IIS5 IIS 5.x 运行在进程InetInfo.exe ...