为什么我不能将字符串变量转换为整数值?

时间:2018-07-27 09:11:00

标签: ios swift

在进行字符串操作并将其转换为整数值时,我得到了意外的结果。请有人帮我解释为什么我得到这些结果。我将显示代码和打印结果,并解释我的期望。

var startIndex = string?.index((string?.startIndex)!, offsetBy: 10)  
var endIndex = string?.index(of: ".")!  
var field = String(describing: string?[startIndex!..<endIndex!])  
print(field as Any)  

打印:

Optional("10")

正是我所期望的。

print(field.lengthOfBytes(using: .utf8))  

打印:

14

不是我所期望的。我期望值为2,因为“ 10”只有2个字符长。

print(Int(field) as Any)  

打印:

nil

不是我所期望的。我期望值为10,因为将字符串“ 10”转换为整数将是10的整数值。

我刚刚在Playground中复制了此代码,它可以按预期工作。我不知道为什么。

//: Playground - noun: a place where people can play

import Foundation

var string = "Network\t\t\t10.0.0.0/8\nClass\t\t\t\tA\nRequired Hosts:\n2\n\nRequired hosts\t2\nAvailable hosts\t2\nSubnet\t\t\t\t10.0.0.0/30\nRange start\t\t10.0.0.1\nRange end\t\t\t10.0.0.2\nBroadcast\t\t\t10.0.0.3\nMask\t\t\t\t255.255.255.252\n\n"

print(string)

var startIndex = string.index(string.startIndex, offsetBy: 10)

var endIndex = string.index(of: ".")!

var field = String(describing: string[startIndex..<endIndex])

print(field as Any)
print(field.lengthOfBytes(using: .utf8))
print(Int(field) as Any)

打印:

Network            10.0.0.0/8
Class                A
Required Hosts:
2

Required hosts    2
Available hosts    2
Subnet                10.0.0.0/30
Range start        10.0.0.1
Range end            10.0.0.2
Broadcast            10.0.0.3
Mask                255.255.255.252


10
2
Optional(10)

3 个答案:

答案 0 :(得分:1)

尝试此希望对您有帮助:

var field = String("10")  
var intValue = Int(field)
print(intValue!)

结果: 10

答案 1 :(得分:0)

  

var字段=字符串(描述:字符串?[startIndex!..

字段现在具有值Optional("10")

  

print(field.lengthOfBytes(使用.utf8))

打印14,因为那是字符串Optional("10")的长度。毫不奇怪。

  

print(Int(field)as Any)

nil是因为字符串Optional("10")无法转换为Int。

如果您从string中删除了可选性,则一切正常:

if let str = string {
    var startIndex = str.index((string?.startIndex)!, offsetBy: 10)
    var endIndex = str.index(of: ".")!
    var field = String(describing: str[startIndex..<endIndex])
    print(field)

    print(field.lengthOfBytes(using: .utf8))

    print(Int(field))
}

答案 2 :(得分:0)

尽管代码有点麻烦,但如果第一位是字符串中的第11个字符,它应该可以工作

但是在这种情况下,float mil = atof(model); 更加可靠,因为偏移量可以是动态的,结果是Scanner

扫描仪扫描到第一个十进制数字,然后扫描Int并将其分配给Int变量。

result