小编Vla*_*Nul的帖子

'dispatch_once_t'在Swift中不可用:改为使用延迟初始化的全局变量

dispatch_once_t在迁移到Swift 3 时遇到了麻烦.

根据Apple的迁移指南:

Swift中不再提供免费函数dispatch_once.在Swift中,您可以使用延迟初始化的全局变量或静态属性,并获得与提供的dispatch_once相同的线程安全性和一次性保证.例:

let myGlobal = { … global contains initialization in a call to a closure … }()

_ = myGlobal // using myGlobal will invoke the initialization code only the first time it is used.

所以我想迁移这段代码.所以它是在迁移之前:

class var sharedInstance: CarsConfigurator
{
    struct Static {
        static var instance: CarsConfigurator?
        static var token: dispatch_once_t = 0
    }

    dispatch_once(&Static.token) {
        Static.instance = CarsConfigurator()
    }

    return Static.instance!
}
Run Code Online (Sandbox Code Playgroud)

迁移后,遵循Apple的指导原则(手动迁移),代码如下所示:

class var sharedInstance: CarsConfigurator
{
    struct Static …
Run Code Online (Sandbox Code Playgroud)

swift swift3

23
推荐指数
1
解决办法
1万
查看次数

'String'类型的值没有成员'stringByTrimmingCharactersInSet'

将我的项目转换为swift 3后,我Value of type 'String' has no member 'stringByTrimmingCharactersInSet'在这个块的第一行得到以下错误:

extension UIColor {
    convenience init (hex:String) {
        var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercased() // error appears on this line

        if (cString.hasPrefix("#")) {
            cString = (cString as NSString).substring(from: 1)
        }



        let rString = (cString as NSString).substring(to: 2)
        let gString = ((cString as NSString).substring(from: 2) as NSString).substring(to: 2)
        let bString = ((cString as NSString).substring(from: 4) as NSString).substring(to: 2)

        var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
        Scanner(string: rString).scanHexInt32(&r)
        Scanner(string: gString).scanHexInt32(&g)
        Scanner(string: …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift swift3

22
推荐指数
1
解决办法
2万
查看次数

当我在STDIN中输入一个长字符串时,Swift的readLine()为nil

我试图解决这个 HackerRank的有关动态规划问题.我想我已经找到了一个解决方案,可能效率不高,但我仍在努力.

我提交了我的代码并且无法通过大型测试用例,因此我尝试使用该测试用例自行测试.问题是当我输入输入数据Xcode没有响应时,它不会崩溃,但它不会继续执行代码.

首先,我使用此代码读取包含n个以空格分隔的整数的单行,在本例中为68,738.

let arr = readLine()!.characters.split(" ").map({ Int(String($0))! })
Run Code Online (Sandbox Code Playgroud)

经过一段时间(几秒钟,甚至几分钟),代码崩溃,说它在展开一个可选值时发现了nil.

所以我尝试将该指令拆分如下:

let input = readLine()!
let arr = input.characters.split(" ").map({ Int(String($0))! })
Run Code Online (Sandbox Code Playgroud)

在这里,我希望代码在第二行崩溃,尝试将输入字符串映射到整数数组.但是在尝试readLine()时代码崩溃了.输入字符串长370,112.

我也尝试使用此代码以至少获取字符串输入:

let input = readLine()
let arr = input!.characters.split(" ").map({ Int(String($0))! })
Run Code Online (Sandbox Code Playgroud)

但输入是零.我假设输入字符串太长,但在32字节CPU上不应该是2,147,483,648?我猜这个空间够了吧?

我用google搜索readLine()是否有任何限制但没有找到任何限制.我会尝试用另一种语言解决这个问题,但我真的很想在Swift中解决这个问题.有没有我没看到的东西?

swift

3
推荐指数
1
解决办法
1080
查看次数

标签 统计

swift ×3

swift3 ×2

ios ×1

xcode ×1