相关疑难解决方法(0)

Swift的守卫关键词

Swift 2引入了guard关键字,可用于确保准备好配置各种数据.我在这个网站上看到的一个例子演示了一个submitTapped函数:

func submitTapped() {
    guard username.text.characters.count > 0 else {
        return
    }

    print("All good")
}
Run Code Online (Sandbox Code Playgroud)

我想知道使用guard是否与使用if条件的旧式方式有所不同.它是否会带来好处,而使用简单的支票是无法获得的?

swift2 guard-statement

190
推荐指数
8
解决办法
11万
查看次数

如何评估Swift IF LET?

我在Swift网站上看​​过这个代码,这里有各种帖子,我正在努力掌握基础知识.这条线如何评估?

if let name = optionalName {
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为它不是name ==可选名称,它正在分配值,所以如何报告为真,为什么当你用nil替换john appleseed时它不正确,因为它仍然是相同的?

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)

if-statement swift

73
推荐指数
3
解决办法
6万
查看次数

Swift语言:nil检查,如果是,则实例化新对象

有什么方法可以简化这个:

var unloadedImagesRows = [String:[Int]]()

private func addToUnloadedImagesRow(row: Int, forLocation:String!) {
    if unloadedImagesRows[forLocation] == nil {
                    unloadedImagesRows[forLocation] = [Int]()
    }
    unloadedImagesRows[forLocation]!.append(row)
}
Run Code Online (Sandbox Code Playgroud)

Swift是否有一种简单的方法可以检查nil,如果是,则创建一个新对象,所有后续使用都引用该对象?

initialization swift

9
推荐指数
1
解决办法
2130
查看次数

SpriteKit.从可选到强制解包的更改会导致应用程序崩溃

我正在关注SpriteKit的教程,它有一个IF语句的问题.该线的逻辑如下:如果子弹和小行星发生碰撞,则将其移除.

if body1.categoryBitMask == PhysicsCategories.bullet && body2.categoryBitMask == PhysicsCategories.asteroid {
   // remove bullet and asteroid
}
Run Code Online (Sandbox Code Playgroud)

当试图确保小行星(body2.node)在可关闭区域之前可以关闭之前,会出现问题.为此,作者添加了以下内容:

body2.node?.position.y < self.size.height
Run Code Online (Sandbox Code Playgroud)

制作完整的IF声明如下:

if body1.categoryBitMask == PhysicsCategories.bullet && body2.categoryBitMask == PhysicsCategories.asteroid && body2.node?.position.y < self.size.height {
   // remove bullet and asteroid
}
Run Code Online (Sandbox Code Playgroud)

显然这条线与Swift 2配合使用,但是Swift 3进行了一次校正,从一个可选的位置改变了位置,并且力量展开了位置.

    if body1.categoryBitMask == PhysicsCategories.bullet && body2.categoryBitMask == PhysicsCategories.asteroid && body2.node!.position.y < self.size.height {
        // remove bullet and asteroid        
    }
Run Code Online (Sandbox Code Playgroud)

通过强行展开位置,当三个物体碰撞时,应用程序崩溃了"我认为".在看屏幕时真的很难分辨.

我正在测试下面的代码,我还没有遇到任何问题.你们认为下面的修复工作会起作用吗?我在想的是,如果我确定body2.node不是nil,那么没有理由为什么应用程序应该崩溃,因为在尝试强行打开它时不会遇到nil.

if body1.categoryBitMask == PhysicsCategories.bullet && body2.categoryBitMask == PhysicsCategories.asteroid {
    // If the bullet has hit the …
Run Code Online (Sandbox Code Playgroud)

sprite-kit swift3

4
推荐指数
1
解决办法
122
查看次数

如何安全地将UITableView滚动到一行*?

有时当我试图将tableview滚动到一行时,我可能会意外地提供一个不存在的部分/行.然后应用程序将崩溃.

self.tableView.scrollToRow(at: IndexPath(row: targetRow, section: targetSection), at: UITableViewScrollPosition.bottom, animated: true);
Run Code Online (Sandbox Code Playgroud)

如何使这个滚动过程崩溃安全?我的意思是,如果我提供不存在的部分/行,我希望UITableView只是忽略它.或者如何在滚动之前检查UITableView中是否存在节/行?谢谢.

uitableview ios swift

4
推荐指数
2
解决办法
756
查看次数

Swift:guard let 和 where - 优先级

有时,我想guardlet&结合使用where来简化我的代码。但我想知道 let 的优先级是什么以及在哪里。例如:

class Person {
    func check() -> Bool? {
        print("checking")
        return nil
    }
}

func test(dont: Bool) {
    let person = Person()
    guard let check = person.check() where dont else {
        print("should not check")
        return
    }
    print("result: \(check)")
}


test(false)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的控制台结果,打印输出为:

  • 检查
  • 不应该检查

let check = person.check() where dont对于in语法的条件guard <condition> else { },即使 in 中的表达式where与 in 中表达式的结果无关let,Swift 似乎也是let先执行后检查where。有时在我的代码中,let可选绑定需要大量计算,并且where …

swift

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

在guard语句的else块中使用assert

我在Google Analytics的实施说明中遇到了这个问题:

guard let gai = GAI.sharedInstance() else {
    assert(false, "Google Analytics not configured correctly")
}
Run Code Online (Sandbox Code Playgroud)

我从来没有想过可以在else子句中有一个断言,而不返回.这对我来说没有意义,因为断言只会在测试方案中进行评估.那么,为什么编译器不警告它不返回(在发布版本的情况下).

编辑:这是在功能范围内 application(_:didFinishLaunchingWithOptions) -> Bool

编辑2:我发现的其他信息可以解答它:

不幸的是,一旦你进行发布构建,这将会中断,因为在发布配置中删除了断言,并且一个保护块必须结束当前作用域的执行.

https://help.insight.com/app/answers/detail/a_id/120/~/integrating-google-analytics-into-ios-apps-using-swift-4

ios swift guard-statement

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