小编iel*_*ani的帖子

如何对Swift代码执行进行基准测试?

是否有一种方法/软件可以提供执行用Swift编写的代码块所需的精确时间,除了以下内容?

let date_start = NSDate()

// Code to be executed 

println("\(-date_start.timeIntervalSinceNow)")
Run Code Online (Sandbox Code Playgroud)

performance swift

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

对于通用函数,什么协议应采用什么协议来将任何数字类型作为Swift中的参数?

我想在Swift中创建一个函数接受任何数字(Int,Float,Double,...)

func myFunction <T : "What to put here"> (number : T) ->  {
    //...
}
Run Code Online (Sandbox Code Playgroud)

不使用NSNumber

double int numbers swift

36
推荐指数
1
解决办法
2686
查看次数

如何在Swift中测试变量的类?

我想检查数组的元素是否是Swift中UILabel的子类:

import UIKit

var u1 = UILabel()
u1.text="hello"
var u2 = UIView(frame: CGRectMake(0, 0, 200, 20))
var u3 = UITableView(frame: CGRectMake(0, 20, 200, 80))

var myArray = [u1, u2, u3]

var onlyUILabels = myArray.filter({"what to put here?"})
Run Code Online (Sandbox Code Playgroud)

没有桥接到目标c.

ios swift

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

supportedInterfaceOrientations方法不会覆盖其超类中的任何方法

在UIViewController中,这段代码:

public override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask {
    if let mainController = self.mainViewController{
        return mainController.supportedInterfaceOrientations
    }
    return UIInterfaceOrientationMask.all
}
Run Code Online (Sandbox Code Playgroud)

给出了错误 Method doesn't override any method from its superclass

我使用的是Xcode 8 beta 4,iOS部署目标是9.0,并且Use Legacy Swift Language Version设置为NoBuild Settings

我怎么能将上面的代码转换为Swift 3?

xcode ios swift

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

如何在Swift中将Any转换为Int

在宣布我时我收到错误

var users =  Array<Dictionary<String,Any>>()
users.append(["Name":"user1","Age":20])
var i:Int = Int(users[0]["Age"])
Run Code Online (Sandbox Code Playgroud)

如何获得int值?

swift

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

在SwiftUI中使VStack充满屏幕的宽度

给定此代码:

import SwiftUI

struct ContentView : View {
    var body: some View {
        VStack(alignment: .leading) {
            Text("Title")
                .font(.title)

            Text("Content")
                .lineLimit(nil)
                .font(.body)

            Spacer()
        }
        .background(Color.red)
    }
}

#if DEBUG
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif
Run Code Online (Sandbox Code Playgroud)

导致这种交互:

预习

VStack即使标签/文本组件不需要整个宽度,如何填充屏幕的宽度?

我发现的一个技巧是在结构中插入一个 HStack,如下所示:

VStack(alignment: .leading) {
    HStack {
        Spacer()
    }
    Text("Title")
        .font(.title)

    Text("Content")
        .lineLimit(nil)
        .font(.body)

    Spacer()
}
Run Code Online (Sandbox Code Playgroud)

产生所需的设计:

期望的输出

有没有更好的办法?

xcode ios swift swiftui

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

在Swift 3/iOS10中使用Dynamic Type和自定义字体的更好方法

我试过两种方法:

方法1:

label.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.body)
label.adjustsFontForContentSizeCategory = true
Run Code Online (Sandbox Code Playgroud)

即使在"设置"中更改了首选文本大小,文本大小也会自动更改,即使在我返回应用程序之前,这也可以正常工作.它只适用于系统字体(旧金山).

方法2:

要使用自定义字体,我添加了一个扩展名UIFontDescriptor:

//from this answer http://stackoverflow.com/a/35467158/2907715
extension UIFontDescriptor {

    private struct SubStruct {
        static var preferredFontName: String = "Avenir-medium"
    }

    static let fontSizeTable : NSDictionary = [
        UIFontTextStyle.headline: [
            UIContentSizeCategory.accessibilityExtraExtraExtraLarge: 23,
            UIContentSizeCategory.accessibilityExtraExtraLarge: 23,
            UIContentSizeCategory.accessibilityExtraLarge: 23,
            UIContentSizeCategory.accessibilityLarge: 23,
            UIContentSizeCategory.accessibilityMedium: 23,
            UIContentSizeCategory.extraExtraExtraLarge: 23,
            UIContentSizeCategory.extraExtraLarge: 21,
            UIContentSizeCategory.extraLarge: 19,
            UIContentSizeCategory.large: 17,
            UIContentSizeCategory.medium: 16,
            UIContentSizeCategory.small: 15,
            UIContentSizeCategory.extraSmall: 14
        ],
        UIFontTextStyle.subheadline: [
            UIContentSizeCategory.accessibilityExtraExtraExtraLarge: 21,
            UIContentSizeCategory.accessibilityExtraExtraLarge: 21,
            UIContentSizeCategory.accessibilityExtraLarge: 21,
            UIContentSizeCategory.accessibilityLarge: 21,
            UIContentSizeCategory.accessibilityMedium: 21, …
Run Code Online (Sandbox Code Playgroud)

fonts ios swift uifontdescriptor dynamic-type-feature

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

Swift中的字符串插值

swift中的函数采用Swift中的任何数字类型(Int,Double,Float,UInt等).该函数将数字转换为字符串

功能签名如下:

func swiftNumbers <T : NumericType> (number : T) -> String {
    //body
}
Run Code Online (Sandbox Code Playgroud)

NumericType是一种自定义协议,已添加到Swift中的数字类型中.

在函数体内,该数字应转换为字符串:

我使用以下内容

var stringFromNumber = "\(number)"
Run Code Online (Sandbox Code Playgroud)

这不是那么优雅,PLUS:如果数字的绝对值严格低于0.0001则给出:

"\(0.000099)" //"9.9e-05"
Run Code Online (Sandbox Code Playgroud)

或者如果数字是一个大数字:

"\(999999999999999999.9999)" //"1e+18"
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个字符串插值限制?(不使用Objective-C)

PS:

NumberFormater 也不起作用

import Foundation

let number : NSNumber = 9_999_999_999_999_997

let formatter = NumberFormatter()
formatter.minimumFractionDigits = 20
formatter.minimumIntegerDigits = 20
formatter.minimumSignificantDigits = 40

formatter.string(from: number) // "9999999999999996.000000000000000000000000"

let stringFromNumber = String(format: "%20.20f", number) // "0.00000000000000000000"
Run Code Online (Sandbox Code Playgroud)

string string-interpolation swift

8
推荐指数
2
解决办法
9556
查看次数

斯威夫特的懒惰

为什么lazy在这里使用?

extension SequenceType {
    func mapSome<U>(transform: Generator.Element -> U?) -> [U] {
        var result: [U] = []
        for case let x? in lazy(self).map(transform) {
            result.append(x)
        }
        return result
    }
}
Run Code Online (Sandbox Code Playgroud)

此扩展使用返回可选的转换函数,并返回仅包含未转换为nil的值的数组

为什么不用self.map(transform)?这里有懒惰吗?

lazy-evaluation swift swift2

8
推荐指数
2
解决办法
1381
查看次数

应用程序试图在自身上呈现模态视图控制器

let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
if userSignedInGlobal == "success"{
    if let mainTabController = storyboard.instantiateViewController(withIdentifier: "MainTabController") as?  MainTabController{
        mainTabController.present(mainTabController, animated: true, completion: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“应用程序试图在其自身上呈现模态视图控制器。呈现控制器是 .'

我需要在使用 firebase 对应用程序进行身份验证后导航到一个页面,以便在验证身份验证后使用上面的代码。我该如何解决这个问题,一个解释如何到达那里的参考链接或代码就足够了。

uitabbarcontroller uikit ios swift

8
推荐指数
1
解决办法
9752
查看次数