Swift 语法错误和 init()?

Posted

技术标签:

【中文标题】Swift 语法错误和 init()?【英文标题】:Swift Syntax Error and init()? 【发布时间】:2015-12-19 09:11:15 【问题描述】:

我学得很快。我对初始化器有疑问 init(). 比如我要初始化 Int。

var number: Int  = 20
var number = Int(20)
var number = Int.init(20)

所有的表达方式都一样? 二、为什么会出现这种表达方式?

var check = "123"
var phoneNum:Int?
if((phoneNum = Int.init(check)) != nil)

    print("Success");

没有错误!

var check = "123"
var phoneNum:Int? = Int.init(check)

if(phoneNum != nil)

    print("Success");

【问题讨论】:

为什么会出现错误? Swift 不是 C。在 Swift 中,赋值不会产生值。 我觉得 Swift 像 C。我努力学习 Swift!感谢您的评论。 【参考方案1】:

    是的,这些都具有相同的效果:

    var number: Int  = 20
    var number = Int(20)
    var number = Int.init(20)
    

    这是另一种方法:

    var number = 20
    

    这会产生错误:

    var check = "123"
    var phoneNum:Int?
    if((phoneNum = Int.init(check)) != nil)
    
        print("Success");
    
    

    你得到一个错误(“错误:'()' 类型的值永远不能为零,不允许比较”)因为 Swift 中的赋值返回 (),这是 Void 类型的唯一值,但 nil是 Optional 类型,与 Void 不同。 Swift 中的赋值通常不能用作表达式。

【讨论】:

【参考方案2】:

我想将此作为评论添加到rob 的答案中,但由于我没有足够的声誉,所以我的答案是?评论(双关语;)。

关于最后两个示例,您还可以使用optional binding 来帮助完成作业:

var check = "123"

var phoneNumber: Int?

if let number = Int.init(check) 
    phoneNumber = number
    print("Success")


print(phoneNumber)

// Success
// Optional(123)

更改check 值:

var check = "A23"

var phoneNumber: Int?

if let number = Int.init(check) 
    phoneNumber = number
    print("Success")


print(phoneNumber)

// nil

我希望这也有帮助。

【讨论】:

以上是关于Swift 语法错误和 init()?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 三元语法错误

在 kivymd 的 __init__.py 文件中出现语法错误

将代码更新为最新的 Swift 4 语法会导致“线程 1:致命错误:索引超出范围”错误

如何使用 Swift #selector 语法解决“歧义使用”编译错误?

语法错误

Swift cocoapod install framework (Alamofire) 在 xcode 中出现语法错误