小编Cos*_*ows的帖子

"%不可用:使用truncatingRemainder"是什么意思?

使用扩展代码时出现以下错误,我不确定他们是否要求使用其他运算符或根据Internet搜索修改表达式中的值.

错误:%不可用:改为使用truncatingRemainder

扩展代码:

extension CMTime {
    var durationText:String {
        let totalSeconds = CMTimeGetSeconds(self)
        let hours:Int = Int(totalSeconds / 3600)
        let minutes:Int = Int(totalSeconds % 3600 / 60)
        let seconds:Int = Int(totalSeconds % 60)

        if hours > 0 {
            return String(format: "%i:%02i:%02i", hours, minutes, seconds)
        } else {
            return String(format: "%02i:%02i", minutes, seconds)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

设置分钟和秒变量时会发生错误.

xcode modulus ios swift swift3

91
推荐指数
3
解决办法
4万
查看次数

Swift 3的第一个参数名称

在Swift 2中,似乎在调用函数时并不总是需要第一个参数名称.现在在Swift 3中,调用函数时需要第一个参数名称.例如:

func frobnicate(runcible: String) { 
    print("Frobnicate: \(runcible)") 
}
Run Code Online (Sandbox Code Playgroud)

Swift 2.2允许通过简单输入来调用函数:

Frobnicate("Station")
Run Code Online (Sandbox Code Playgroud)

Swift 3似乎要求我们使用方法的第一个参数名称,例如:

Frobnicate(runcible:"Station")
Run Code Online (Sandbox Code Playgroud)

Swift 3适用于所有功能和方法,还是仅适用于某些情况?

swift swift3

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

为什么不能在Swift中为@IBOutlet分配let而不是var?

我正在关注Swift的教程,我注意到作者使用var而不是let在声明@IBOutlet变量时.所以我很好奇为什么我不能使用,let因为即使对象是常量,对象的属性仍然是可变的,或者不是这样的情况?

错误使用时,Xcode中显示let

@IBOutlet 属性要求属性是可变的

但我很困惑,因为它questionLabel是一个UILabel对象,不一定是对象的属性.或者questionLabel对象是当前viewController的属性?

import UIKit

class ViewController: UIViewController {

    @IBOutlet let questionLabel: UILabel!

}
Run Code Online (Sandbox Code Playgroud)

如果我过度分析,请提前感谢您.

xcode ios swift

13
推荐指数
3
解决办法
1618
查看次数

条件绑定的初始化程序必须具有可选类型,而不是'UIView'

通过对StackOverflow的研究,我了解到这个错误是由于尝试绑定一个不是可选的类型引起的,但是在这种情况下没有意义,因为它使用了guard.这是我的代码:

func animateTransition(_ transitionContext: UIViewControllerContextTransitioning) {
        // Here, we perform the animations necessary for the transition

        guard let fromVC = transitionContext.viewController(forKey: UITransitionContextFromViewControllerKey) else { return }
        let fromView = fromVC.view
        guard let toVC = transitionContext.viewController(forKey: UITransitionContextToViewControllerKey) else { return }
        let toView = toVC.view
        guard let containerView = transitionContext.containerView() else { return }

        if self.presenting {
            containerView.addSubview(toView)
        }

        let animatingVC = self.presenting ? toVC : fromVC
        let animatingView = animatingVC.view
        let appearedFrame = transitionContext.finalFrame(for: animatingVC)

        var alpha: CGFloat = 1 …
Run Code Online (Sandbox Code Playgroud)

optional ios swift3

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

Swift 中的协议是引用类型还是值类型?

我问这个问题的原因是因为我正在阅读使用委托的教程。根据我从其他在线教程/文章中读到的内容,据我所知,这个特定的教程尚未创建保留周期。我还使用 Instruments(内存泄漏和僵尸)对其进行了测试,以确保没有内存泄漏。

我试图弄清楚一个类是否只是简单地符合协议,这是否会创建一个引用?

我认为不会,但我想确定一下。

以下是创建委托成员的协议和类:

import Foundation
import CoreBluetooth

protocol TransferServiceScannerDelegateProtocol: NSObjectProtocol {
    func didStartScan()
    func didStopScan()
    func didTransferData(data: NSData?)
}

class TransferServiceScanner: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {
    var centralManager: CBCentralManager!
    var discoveredPeripheral: CBPeripheral?
    var data = NSMutableData()
    weak var delegate: TransferServiceScannerDelegateProtocol?

    init(delegate: TransferServiceScannerDelegateProtocol?) {
        super.init()
        centralManager = CBCentralManager(delegate: self, queue: nil)
        self.delegate = delegate
    }


    //start of cbCentralDelegate method
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        switch central.state {
        case .poweredOn:
            print("Central is powered on...")
            break
        case .poweredOff:
            print("Central is powered off...") …
Run Code Online (Sandbox Code Playgroud)

delegation ios swift

7
推荐指数
1
解决办法
5858
查看次数

在无效的indexPath处捕获了对rect的NSInternalInconsistencyException请求

以下行崩溃了该程序:

let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath: NSIndexPath(forRow: 0, inSection: 0)) as! ItemCell
Run Code Online (Sandbox Code Playgroud)

控制台日志显示以下错误:

"caught "NSInternalInconsistencyException", "request for rect at invalid index path (<NSIndexPath: 0xc000000000000016> {length = 2, path = 0 - 0})"
Run Code Online (Sandbox Code Playgroud)

这是我检查过的一些项目清单:

  • 身份检查器中列出了正确的故事板ID
  • 身份检查器中列出了正确的自定义类
  • 属性检查器在"表视图单元标识符"字段中具有"ItemCell"

这是完整的代码:

import XCTest
@testable import ToDo

class ItemCellTests: XCTestCase {

    override func setUp() {
        super.setUp()
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }

    override func tearDown() {
        // Put teardown code here. …
Run Code Online (Sandbox Code Playgroud)

xcode ios xctest swift

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

在 Swift 中将变量分配给下划线

在研究了 stackoverflow 关于 Swift 中下划线的内容后,我明白下划线意味着 a) 忽略这个函数,b) 在使用该方法时可以省略参数名称。我不明白的是,如果我们将变量分配给下划线会发生什么?通过为变量分配下划线,这可以消除来自 Xcode 的编译器警告,该警告显示“初始化程序的结果未使用”,但如果您不以任何方式使用此变量,则不会显示警告。

这个变量是否仍然被创建并存储在内存中,或者是否被编译器一起忽略,就好像它是一行被注释掉的代码一样?

例如:

func test_ToDoItem_TakesTitle(){

        let firstToDoItem = ToDoItem(title: "First Instance Title")

        _ = ToDoItem(title: "First ToDoItem instance")

        XCTAssertEqual(firstToDoItem.title, "First Instance Title")

    }
Run Code Online (Sandbox Code Playgroud)

以下代码行是创建并存储在内存中还是被忽略:

 _ = ToDoItem(title: "First ToDoItem instance")
Run Code Online (Sandbox Code Playgroud)

希望这个问题有意义,因为我想注意 Xcode 中每块内存的使用方式。

xcode swift

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

错误:类型字符串的值没有成员componentsSeparatedByCharactersInSet

以下代码引发以下错误:"类型字符串的值没有成员componentsSeparatedByCharactersInSet"

此代码来自另一个在swift版本1或2中运行但之前不再有效的项目.

   import Foundation

extension String {

    func split() -> [String] {
        return self.componentsSeparatedByCharactersInSet(
            CharacterSet.whitespaceAndNewlineCharacterSet())
            .filter({$0 != ""});
    }
}

extension Array {

    func unique<T: Equatable>() -> [T] {
        var uniqueValues = [T]();

        for value in self {
            if !contains(uniqueValues, value as T) {
                uniqueValues.append(value as! T);
            }
        }
        return uniqueValues;
    }

    func first<T>(test:(T) -> Bool) -> T? {
        for value in self {
            if test(value as! T) {
                return value as? T;
            }
        }
        return nil;
    }
}
Run Code Online (Sandbox Code Playgroud)

xcode ios swift swift2 swift3

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

'CountableClosedRange <Int>'类型的表达式模式不能匹配'Int'类型的值?

在Swift 3之前的某个时刻,这段代码可以在没有任何编译错误的情况下工作,但是在转换为Swift 3之后,这段代码没有编译,我也不完全理解值类型是如何不同的.

给出的错误是expression pattern of type 'CountableClosedRange<Int>' cannot match values of type 'Int'针对我试图在switch语句中使用不同值范围的切换情况:

switch hour {
        case 0 ... 11:
            greetingStatement.text = "Good Morning"
        case 12 ... 24:
            greetingStatement.text = "Good Evening"
        default:
            greetingStatement.text = "Hello"
        }
Run Code Online (Sandbox Code Playgroud)

这是完整的代码:

import UIKit

class ViewController: UIViewController {


    @IBOutlet weak var userInput: UITextField!
    @IBOutlet weak var usertOutput: UILabel!

    @IBOutlet weak var tapMeAfterEnteringYourName: UIButton!

    @IBOutlet weak var greetingStatement: UILabel!
    @IBOutlet weak var letsGetStartedLabel: UILabel!

    @IBOutlet weak var ballonsImageView: UIImageView!
    @IBOutlet weak var …
Run Code Online (Sandbox Code Playgroud)

xcode ios swift swift3

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

类型'String'的值在Swift中没有成员'range'

我相信我遇到了Swift版本问题,但我不太确定.代码可以在我的Xcode平台上运行,但不能在在线swift编译器中运行.有没有其他人遇到这个问题或知道我可以用什么来替换我检查字符的以下行:

if i == 0 || !((line.range(of: ":") != nil)) 
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

import Foundation



func hackTheString(line: String){

        var maxOpen: Int = 0
        var minOpen: Int = 0

        minOpen = 0
        maxOpen = 0
        let i = 0
        while i < line.characters.count {
            for character in line.characters {
                if character == "(" {
                    maxOpen += 1
                    if i == 0 || !((line.range(of: ":") != nil)) {
                        minOpen += 1
                        }
                    }
                else if character == ")"{
                    minOpen = max(0,minOpen-1)

                    if i == …
Run Code Online (Sandbox Code Playgroud)

swift

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

标签 统计

swift ×9

ios ×7

xcode ×6

swift3 ×5

delegation ×1

modulus ×1

optional ×1

swift2 ×1

xctest ×1