相关疑难解决方法(0)

在Swift中阻止保留周期?

传统上在Objc中,我们使用weakSelf来防止块的额外保留计数.

swift内部如何管理Objc块中发生的保留周期?

swift

50
推荐指数
3
解决办法
2万
查看次数

ios中块(目标C)和闭包(Swift)之间的区别

在教程中,它写的功能上都是相同的,甚至闭包更容易阻塞,它避免了块和内存管理的复杂性,我已经经历了很多教程,但除了这些我没有得到swift的"闭包"和Objective-C"阻止".

任何人都可以深刻解释这种差异.任何帮助,将不胜感激.

closures objective-c ios objective-c-blocks swift

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

逃离Swift中的闭包

我是Swift的新手,当我遇到逃脱闭合时,我正在阅读手册.我根本没有得到手册的描述.有人可以用简单的语言向我解释一下Swift中有什么逃避封锁.

closures swift

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

强制解包在同一行代码中可选择访问的变量是否安全?

someFunction(completion: { [weak self] in
    self?.variable = self!.otherVariable
})
Run Code Online (Sandbox Code Playgroud)

总是安全吗?我self在语句的开头访问了可选项,并且我个人认为如果self是,那么该语句的第二部分将永远不会被执行nil.这是真的?如果self确实如此nil,第二部分永远不会发生?self在这一行代码中,它永远不会被"填充"?

null memory-management optional ios swift

38
推荐指数
2
解决办法
2395
查看次数

无主与弱.为什么我们应该更喜欢无主?

正如Apple在"Swift编程语言"中所说,似乎我们应该unownedweak任何可能的更喜欢:

如果捕获的引用永远不会变为nil,则应始终将其捕获为无主引用,而不是弱引用.

本页的"弱和无主参考"部分

我确实知道这两者之间的区别.但我好奇的是有没有很好的理由,宁愿 unownedweak?我认为weak更安全,我们可以总是编写[weak obj]和可选的绑定检查,而不考虑存在的可能性obj.

它与某些性能考虑或我错过的东西有关吗?或者是否完全可以使用weak而不是一直使用unowned

memory-management swift

11
推荐指数
1
解决办法
1350
查看次数

为什么Swift关闭不能捕获自我?

我正在测试Xcode游乐场的快速关闭.

这是我的代码:

import UIKit

class A{
    var closure: ()->() = {}

    var name: String = "A"
    init() {
        self.closure = {
            self.name = self.name + " Plus"
        }
    }

    deinit {
        print(name + " is deinit")
    }
}

var a: A?
a = A()
a = nil
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,a是封闭自包含的,所以a永远不会释放.

但是,当我在最后一行之前添加这一行时:

a?.closure = { a?.name = "ttt" }
Run Code Online (Sandbox Code Playgroud)

然后,我在输出窗口中发现"A is deinit",这意味着a已被释放.为什么?是不是回收参考?

要进行测试,我使用一个函数来设置闭包,代码是版本2:

import UIKit

class A{
    var closure: ()->() = {}
    func funcToSetClosure(){
        self.closure = { self.name = "BBB"}
    }
    var name: …
Run Code Online (Sandbox Code Playgroud)

closures automatic-ref-counting swift

6
推荐指数
1
解决办法
2005
查看次数

Swift将计算数据传递回上一个视图控制器

我正在创建我的第一个简单的预算应用程序.基本上,我采取一些用户输入,如月收入和储蓄目标.然后他们点击"开始",该应用程序计算诸如他们的每日预算等内容.

我遇到了麻烦.在完成所有计算之后,我会显示"你每天可以花多少钱"(例如每天20美元),然后通过原始屏幕上的原始输入传递segue.

现在,在这个VC(UserInfoVC)中我创建了一个按钮,让他们可以添加今天花了多少钱.因此,当他们点击这个"花钱"按钮时,我打开一个新的VC(AddSubtractMoney),在那里我会提供一个计算器,在那里他们可以输入他们今天花了多少钱(即12美元)并点击提交.

我将他们的输入与每日预算相比较,以获得新的每日预算.

现在,我无法向后传递这个更新的数字,将其显示在标签"dailySpendingLimitLabel"上的前一个VC上.我知道segues不是向后传递数据的最佳方式.

我已经尝试过闭包,但我最终迷失在语法,协议和代理中(这是我的第二个月编码).

有没有一种简单的方法可以将这些数据传回上一个VC并填充前一个显示标签中的数据?

下面是代码.

第一个片段来自UserInfoVC,我在其中显示我最初输入的数据.第二个片段来自AddSubtractMoney我放置计算器的类,并在函数内创建了一个对象"newestUpdate",允许我计算他们在计算器上输入的数字减去旧的每日预算.为了得到一个新的预算,我想向后呈现UserInfoVC.

class UserInfoViewController : ViewController {

var userNamePassedOver : String?
var userDailyBudgetPassedOver : Double = 99.0
var userDailySavingsPassedOver : Double = 778.00
var userMonthlyEarningsPassedOver : Double?
var userDesiredSavingsPassedOver : Double?
var newAmountPassedBack : Double = 0.0


@IBOutlet weak var dailySavingsNumberLabel: UILabel!
@IBOutlet weak var userNameLabel: UILabel!
@IBOutlet weak var dailySpendingLimitLabel: UILabel!



override func viewDidLoad() {
    super.viewDidLoad()

    userNameLabel.text = userNamePassedOver
    dailySpendingLimitLabel.text = String(format: "%.2f", userDailyBudgetPassedOver) …
Run Code Online (Sandbox Code Playgroud)

viewcontroller ios segue swift

5
推荐指数
2
解决办法
8101
查看次数

pageViewController上的背景图像反向重叠

我有一个pageViewController显示每个索引的背景图像.它可以从左向右(向前)轻扫,但是当您反向滑动时,背景图像会相互重叠.在我实现背景图像之前,每个VC上的UI工作正常和反向,所以我知道它是背景图像.此外,如果我改为page curl而不是scroll在我的storyboard反向工作正常,只是不起作用scroll.这显然是一个已知的错误(从UIPageViewController中删除视图控制器)但是我需要一个Swift解决方案.

pageviewController:

 func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {

        guard
            let currentPageViewController = viewController as? SinglePageViewController,
            let currentIndex = indexOfForecast(currentPageViewController.forecast!) as? Int where currentIndex != 0 else { return nil }  //fixed bug where index was -0 only on scroll

        return viewControllerAtIndex(currentIndex - 1)

    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
        guard
            let lastForecast = forecasts?.last,
            let currentPageViewController = viewController as? SinglePageViewController, …
Run Code Online (Sandbox Code Playgroud)

ios uipageviewcontroller swift

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