关于Swift学习及开发中会遇到的小问题集锦(1)

这些问题及回答,都归纳至泊学用户群,是大家在平日的学习工作过程中遇到的各种小问题,以及解答!将会持续更新


Q:
请教一下这句话的意思?

Paste_Image.png

我现在

Paste_Image.png

做了两个页面的跳转 但是代码过去了 界面没过去
哦原来是时间问题 不能在viewDidLoad 里面直接跳转页面。。 swift 还有什么事件 可以知道页面加载完成啊 ?
A:
切换UI总要有个什么外部事件吧,例如资源加载完成?用户选择了跳过?或者是什么其他的
总不能VC加载完了就立刻切


Q:swift 如何怎么打印变量地址 什么符号
A:在Swift 3里,这样

Paste_Image.png

Q:为什么singleton 能这么写 static let shareInstance = XXX()
我自己 理解是 shareInstance 用static修饰 是一个类分配一块空间
像Class这种 是不是 用Static修饰 就是在里面 开设一块永久空间 存在 属性 和方法?
A:
这里没有所谓里面、外面的说法,static属性不是类对象的一部分。他就是一个在内存里独立存在的对象。


Q:我加上static 和不加static 属性 a 的内存地址 都是一个
按你说的 a 加上static 修饰 应该 存放在static 单独的那块内存中

Paste_Image.png

A:

Paste_Image.png

static属性不是类对象的一部分
就从你刚才的例子其实也能看出来了,a和b的地址也不连续


Q:
extension Rational: Equatable {} func == (lhs: Rational, rhs: Rational) -> Bool {
为什么==的实现要写在extension外面呢?
求教~。。。
A:
其实,重载运算符定义在Global,而不定义为method,这是一个编程语言设计中的惯用形式。为什么是这样呢?在C++里,当我们把 == 重载在类方法内部时,就会强制 == 的左操作数一定是类对象,而不是和这个类对象“等价”的某种形式的其他值。但这样是违背相等操作语义的。因此,为了让 值 == 对象 和 对象 == 值 都可以生效。诸如 赋值、比较这样的二元操作符重载,都定义成Global function。这样,编译器就可以处理上述交换的问题了。


Q:
有个疑问,关于protocol中函数不能包含默认值,对下面这句话不太理解:“当protocol中的方法带有参数时,参数是不能有默认值的。如果我们希望把“提供有默认参数版本的方法”也作为一种约定,我们只能像下面这样单独定义一个不带任何参数的方法。例如我们要添加一个生成引擎名称的方法”

Paste_Image.png

A:

Paste_Image.png

然后,实现的时候,让f1的实现用一个期望的默认值。。。。
这样,f1 看上去就跟可以有一个默认参数一样
如果要把提供默认值变成一种强制行为,就那样定义在protocol里
否则,实现的时候自己整也行


Q:
?强制行为?实现A的时候f1也可以不设置默认参数啊,如何实现强制呢?
A:
这个有点儿trick.....如果你像上面那样定义了protocol,在实现它的时候,就必须要定义两个版本的 f1,一个带参数;一个不带任何参数
而你在实现的时候,让带参数的版本有默认值是不行的
所以,没啥特别的需要,可以不用这么干,直接在实现的时候,让参数有默认值就好了


Q:
用as 做casting得到一定是個optional?
意思是 as 和 as? 是同樣意思嗎?

A:
准确的讲,type casting是没法用 as 的
要不用as? optional转,要不 as! force cast
as 可以用在case语句里,例如 case str as String 这样,判断某个Any 或 AnyObject 是否可以作为 某种具体的类型

Paste_Image.png

就类似这样的用法
总之 as 更多的含义就是单词 as,转型的意味不重


Q:
請教有可能從uiimage 判讀原本圖片的格式是png 或jpg嗎? 轉回nsdata 再判斷頭一個byte 在swift貌似無用

A:
UIImageJPEGRepresentation / UIImagePNGRepresentation 可以判断


Q:
求教 IOS里面 用ALAMOFire 上传 我需要把线程卡住吗? 还是说它直接后台上传了不用管了。 按了HOME都没问题?
A:
...回去到上传的请求了随意操作啊,为什么要卡线程


Q:
如果是很大的文件怎么半 要是不成功 用户也不知道。 原来都是写BS架构的。 这种情况要怎么处理啊?
A:

  1. 如果你要处理很大的文件上传,你的App至少要有一个专门的UI来处理吧?否则你不仅你不知道,用户岂不是也很蒙圈~
  2. 多线程和返回Home之后仍旧可以上传是两回事;
  3. 如果想系统后台上传,注册是一个backgroundSession就行了。然后在handleEventsForBackgroundURLSession里,处理事件;

Q:
主要是 如果用户使用Home建 然后在内存里面关掉了APP这种操作 要怎么处理?
这种情况有事件出来吗? 还是说要自己下次启动的时候验证是否成功?
A:
这种操作木有处理,系统也不会通知
你这个问题涉及到复杂的线程控制
当耗时很久的线程启动后,你需要有一种机制能让它提前终止


Q:
那就是说 要自己验证问题了。 本地要写进度记录。 不知道alamofire 能不能断点续传? 不行就重新上传吧。。
A:
代码可能是这样的。
ui,开始下载:thread.start() ui,终止下载:thread.stop() 线程的代码: function stop() { terminated = true } 线程的工作函数: function working() { while (!terminated) { ....... } }


Q:
求教 将函数 作为参数 要怎么写啊 这个函数有参数的

Paste_Image.png

我这样写报错

Paste_Image.png

A:
先想明白到底想咋样

  1. 按照你第一个图的结果,你需要的参数分明是一个值,不是一个函数;
  2. 按照你第二个图的结果,你需要传递一个Closure,而不是一个真实的函数调用;
    如果参数是个Closure,说明你需要的是实现过程;如果参数是个值,说明你需要的是结果;
    在函数参数的地方声明个Clousre,在函数调用的时候,传递结果。。。
    这就很尴尬了
    不用在里面写参数类型 直接是把函数名当参数就行

Q:
有人知道為何appencontentof 吃一個string array 的variable 會報錯嗎?
A:
因为调用contentOf的时候有一个要求,就是参数序列中的元素类型,必须和原数组中元素类型一样,但是String和AnyObject不一样,所以把一个Array<String>变量传递给Array<AnyObject>应该是不行的。至于字面值为什么可以。我觉得是当那个字面值用在函数参数那个位置做type inference的时候,自动推导成Array<AnyObject>了,因为只有这样编译才能通过
但是你在定义oo的时候,显然不会推导成Array<AnyObject>


Q:
另外這中我發現一個問題有點弄不清楚,String是一個struct吧?一個 struct array顯然不是AnyObject compatible,但為何[String] 是一個 AnyObject ?
A:
因为当String要转换成一个AnyObject的时候,在数组中存放的时候,这个行为是bridge到OC runtime完成的
本质上就是一个 NSArray 里面存了 NSString
处理完,再从OC runtime里,COPY到Swift
我是这么理解的。。。。


Q:
這樣bridge效率會差一點嗎?
A:
会的。


Q:
swift 里面有类似pch的功能吗?
A:
Swift里,就不需要pch...
swift是分模块的,模块内不需要import,模块间才需要。整个app是一个模块。


Q:
3.0元组有变化么
A:

  1. Tuple不再可以传给接受和Tuple元素同样的函数作为参数;
  2. 接受Tuple参数、接受和Tuple元素类型相同参数的函数,将被明确识别为两个独立的函数类型。

Q:
用as 做casting得到一定是個optional?
意思是 as 和 as? 是同樣意思嗎?
A:
准确的讲,type casting是没法用 as 的
要不用as? optional转,要不 as! force cast
as 可以用在case语句里,例如 case str as String 这样,判断某个Any 或 AnyObject 是否可以作为 某种具体的类型

Paste_Image.png

总之 as 更多的含义就是单词 as,转型的意味不重


Q:
swift能捕获 exception么,不是error type
A:
Swift里的异常就是任何实现了ErrorProtocol的类型

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容