首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Coding
V2EX  ›  问与答

Swift 中如何实例化一个类

  •  
  •   hard2reg · 82 天前 · 691 次点击
    这是一个创建于 82 天前的主题,其中的信息可能已经有所发展或是发生改变。
    	
        var audioRecorder:AVAudioRecorder!
        var audioPlayer:AVAudioPlayer!
        
        let audioSession = AVAudioSession.sharedInstance()
    
    

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

    14 回复  |  直到 2019-09-24 11:00:44 +08:00
        1
    luxy   82 天前 via iPhone
    前两行是变量声明,!表明是 Optional 可选类型
        2
    hard2reg   82 天前
    @luxy 相当于声明两个指针吗?
        3
    hard2reg   82 天前
    @luxy 官方文档中说 AVAudioRecorder 是一个类,使用一个类不是应该实例化吗,为什么是声明?
        4
    kingcos   82 天前 via iPhone
    @hard2reg 因为你没有初始化,所以只是声明,初始化,或者说实例化,你要调用构造方法,不然怎么分配内存空间,初始化变量什么的呢?
        5
    kingcos   82 天前 via iPhone   ♥ 1
    感叹号这里意思是,由你保证这两个变量是非空的,如果在某一阶段被赋值了 nil,那下次你在用他的时候就直接崩了
        6
    AwayEM   82 天前 via iPhone
    学啥子不好学 swift
        7
    luxy   82 天前 via iPhone   ♥ 1
    @hard2reg 代码中找找,在使用前应该有实例化的。这里只是声明,可以在使用的时候再实例化。
        8
    hard2reg   82 天前
    @kingcos 那为啥不直接初始化了呢,非要 var。

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

    前面这两行 冒号后面的是类型,加!相当于隐式的让比这两个变量在以后操作的时候都默认不是 nil,一旦没有赋值就直接报错。因为在做 audio 相关的时候这两个变量必须存在,也是省下了下文进行操作的时候再加!的操作而已呀。
    let audioSession = AVAudioSession.sharedInstance() 这个就是获取音频会话的单利。
        13
    lllllliu   82 天前
    还有就是强制解析的事,用!可以直接用。
        14
    0x11901   82 天前
    很多年前大家还在写 c 的时候,喜欢把函数中用到的所有的变量在函数开始的时候先声明一下。后来这种做法渐渐被遗弃了,不过还是有人会这么写吧……
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2296 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 06:36 · PVG 14:36 · LAX 22:36 · JFK 01:36
    ♥ Do have faith in what you're doing.