我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 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) 我试图解决这个 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中解决这个问题.有没有我没看到的东西?