Swift 中如何实例化一个类

2019-09-24 01:20:14 +08:00
 hard2reg
	
    var audioRecorder:AVAudioRecorder!
    var audioPlayer:AVAudioPlayer!
    
    let audioSession = AVAudioSession.sharedInstance()

这段代码中 AVAudioRecorder AVAudioPlayer AVAduioSeesion 都是类吧,前两行是实例化吗?如果不是为什么不写成 audioRecorder = AVAudioRecorder() ?最后为什么要加感叹号呢?难道 audioRecorder 还有可能为 nil ?

1754 次点击
所在节点    问与答
14 条回复
luxy
2019-09-24 01:32:04 +08:00
前两行是变量声明,!表明是 Optional 可选类型
hard2reg
2019-09-24 01:43:45 +08:00
@luxy 相当于声明两个指针吗?
hard2reg
2019-09-24 01:47:01 +08:00
@luxy 官方文档中说 AVAudioRecorder 是一个类,使用一个类不是应该实例化吗,为什么是声明?
kingcos
2019-09-24 02:04:49 +08:00
@hard2reg 因为你没有初始化,所以只是声明,初始化,或者说实例化,你要调用构造方法,不然怎么分配内存空间,初始化变量什么的呢?
kingcos
2019-09-24 02:07:38 +08:00
感叹号这里意思是,由你保证这两个变量是非空的,如果在某一阶段被赋值了 nil,那下次你在用他的时候就直接崩了
AwayEM
2019-09-24 02:09:08 +08:00
学啥子不好学 swift
luxy
2019-09-24 02:30:28 +08:00
@hard2reg 代码中找找,在使用前应该有实例化的。这里只是声明,可以在使用的时候再实例化。
hard2reg
2019-09-24 02:37:18 +08:00
@kingcos 那为啥不直接初始化了呢,非要 var。

我在网上看到其他类似的代码,但最后是问号,这样是不是就没有感叹号来的严谨?
NUKZ
2019-09-24 09:16:20 +08:00
前两行声明,可以理解为:你买个一个房子,房本(合同)上写着你的名字,但是开发商还没有盖好。等盖好了(初始化完成),你住进去,房子的才真实的存在,你可以使用他的属性,如:睡觉,做饭,看电视。至于为什么要分!,?。你可以这么理解:感叹号表示你只有一套房子,如果你把它卖了(置为 nil ),你就没有地方睡觉了。问号表示你有好几套房子,这套房子卖了,你还在其他房子可以住。新手这么理解,真正含义,等你多撸撸代码就懂了。回答不好,请各位老哥轻点喷。
sSsSsSs
2019-09-24 09:16:47 +08:00
@hard2reg 先声明变量然后给变量赋值,或者在声明的同时赋值。两种不同写法而已,干嘛这么纠结呢。至于!前面的人都讲了
CommandZi
2019-09-24 09:39:00 +08:00
一般不会在声明的时候加感叹号,你搜一些新一点的代码看吧,你贴的这个编写的人显然对 Swift 中 Optional 类型不是很了解
lllllliu
2019-09-24 09:47:59 +08:00
var audioRecorder:AVAudioRecorder!
var audioPlayer:AVAudioPlayer!

前面这两行 冒号后面的是类型,加!相当于隐式的让比这两个变量在以后操作的时候都默认不是 nil,一旦没有赋值就直接报错。因为在做 audio 相关的时候这两个变量必须存在,也是省下了下文进行操作的时候再加!的操作而已呀。
let audioSession = AVAudioSession.sharedInstance() 这个就是获取音频会话的单利。
lllllliu
2019-09-24 09:51:35 +08:00
还有就是强制解析的事,用!可以直接用。
0x11901
2019-09-24 11:00:44 +08:00
很多年前大家还在写 c 的时候,喜欢把函数中用到的所有的变量在函数开始的时候先声明一下。后来这种做法渐渐被遗弃了,不过还是有人会这么写吧……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/603535

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX