小编vac*_*ama的帖子

Swift以编程方式为带按钮的按钮创建函数

在Swift中,您可以为这样的按钮创建一个函数:

button.addTarget(self, action: #selector(buttonAction), forControlEvents: .TouchUpInside)
Run Code Online (Sandbox Code Playgroud)

但有没有办法可以做到这样的事情:

button.whenButtonIsClicked({Insert code here})
Run Code Online (Sandbox Code Playgroud)

这样我甚至没有为按钮声明一个显式函数.我知道我可以使用按钮标签,但我更愿意这样做.

closures button uibutton swift

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

如何使用 SwiftUI 消除嵌套 NavigationView 中的空间

我目前正在开发一个使用 SwiftUI 的 iOS 项目。我有 3 个页面(MainMenu、CalendarList 和 DateDetails。)

在第二页(CalenderList)上,屏幕顶部和实际的 NavigationBarTitle 之间有一个空白区域。

第二页的图像 - 日历列表

在第三页上,您可以看到后退按钮(返回主菜单),并且顶部有两个空白区域。

第 3 页的图片 - 日期详细信息

我见过人们使用 .navigationBarHidden 来解决这个问题,但我无法以解决问题的方式实现它。

我是否错误地使用了 NavigationView() ?或者有什么特殊的技巧吗?

这是主菜单的代码:

import SwiftUI

struct MainMenu: View {
    var body: some View {
        NavigationView {
            VStack {
                Text("Calendar")
                    .font(.largeTitle)
                    .fontWeight(.heavy)
                    .foregroundColor(Color(red: 0.055, green: 0.173, blue: 0.322))
                    .padding(.top, 55.0)
                Text("Main Menu")
                    .font(.headline)
                    .foregroundColor(Color(red: 0.635, green: 0.635, blue: 0.635, opacity: 1.0))
                
                /*Image("Logo")
                    .resizable()
                    .frame(width: 150.0, height: 150.0)*/

                Spacer()
                
                HStack {
                    NavigationLink(destination: CalendarList()) {
                        Image(systemName: "calendar")
                            .resizable()
                            .frame(width: 75.0, height: 75.0)
                            .padding()
                            
                            
                    } …
Run Code Online (Sandbox Code Playgroud)

xcode swiftui ios-navigationview

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

Swift,如果允许的话,按给定的字符串强制转换为?someString

我正在尝试存储字典 var items : [String:(type:String,item:AnyObject)] = [:]

例如,关键是"foo"和 items["foo"]?.type = "UILabel"

我想AnyObject从字符串转换为给定类型.

可以这样做吗?:

                                                 //This is a string
if let myConvertedItem = items["file"]!.item as? items["file"]!.type{
     //myConvertedItem is UILabel here..
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

编辑:我看到了这个功能,_stdlib_getTypeName()但是swift无法识别它.我怎么能宣布它?它还能用AnyObject吗?

解决方案我不是在寻找:

做这样的事情:

if items["file"]!.item is UILabel{
     //ok it's UILabel
}

if items["file"]!.item is SomeOtherClassName{
    //ok it's some other class name
}
Run Code Online (Sandbox Code Playgroud)

因为这个if列表可能很长

谢谢!

casting dynamic ios swift

6
推荐指数
2
解决办法
5129
查看次数

在UITableView的底部加载更多

对于我的应用程序,我使用"加载更多底部"属性,如下所示.它实际上工作得很好; 唯一的问题是,当用户到达按钮时,当加载更多功能正在工作时,对于用户来说,它看起来像应用程序冻结了一段时间,因为没有像中的动画视图UIRefreshcontrol.如何在加载新数据之前显示动画.我发现一些UIBottomrefreshcontrol属性作为单独的库,但它们都在Objective-c中.

override func viewDidLoad() {
    super.viewDidLoad()

   refreshResults()

 }

 func refreshResults() {


    refreshPage = 40

    // here the query starts
}


func refreshResults2() {

     // here the query starts to add new 40 rows of data to arrays

}


func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell,     forRowAtIndexPath indexPath: NSIndexPath) {

    if indexPath.row == refreshPage-1 {
        refreshPage = refreshPage + 40

        refreshResults2()

    }
}
Run Code Online (Sandbox Code Playgroud)

uitableview ios uirefreshcontrol swift

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

Xcode 10 beta2:无法为没有参数的类型'UIView'调用初始值设定项

我已下载Xcode 10 beta2并重建我的项目,代码如下:

let someView = UIView()
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

Cannot invoke initializer for type 'UIView' with no arguments

错误Snapshort

很奇怪.使用Xcode 10 beta2时是否有人遇到过这些构建错误?

xcode ios swift xcode10

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

一次初始化4个CGFloats

我试图getRed(green:blue:alpha:)在Swift中使用UIColor上的函数.对于这一点,我需要4个CGFloat的变量(r,g,b,a).目前,为此,我需要输入以下代码:

var r: CGFloat = 0
var g: CGFloat = 0
var b: CGFloat = 0
var a: CGFloat = 0
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来写这个,可能更简洁?

initialization swift

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

警告convertPointToBase已弃用

在我的OS X应用程序中,当我的Web视图加载某些网页时,我在控制台中收到警告(下面​​),但是所有网页都没有在加载时生成此警告,这对我来说似乎很奇怪,因为它看起来像是内容Web视图应该与调用的方法无关.

我没有在我的代码中明确调用此方法.

WARNING: Method convertPointToBase: in class NSView is deprecated on 10.7 and later. It should not be used in new applications. 
Run Code Online (Sandbox Code Playgroud)

所以在某些时候,正在调用NSView方法convertPointToBase,但如果我没有在我的代码中明确地调用它,那么可能导致调用它的原因是什么?可以自动布局调用此方法......?

desktop-application swift

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

为什么nil合并算子?返回零?

请考虑以下涉及nil合并运算符的 示例??:

let mysteryInc = ["Fred": "Jones", "Scooby-Doo": nil]

let lastname = mysteryInc["Scooby-Doo"] ?? "no last name"

print(lastname == nil)  // true
Run Code Online (Sandbox Code Playgroud)

如最后一个print语句所示,nil合并运算符的结果是nil.

如果nil coalescing运算符应该解包一个Optional,为什么它会返回nil

optional swift

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

tableView.reloadData和tableView.reloadRows有什么区别?

tableView.reloadData()和之间有什么区别tableView.reloadRows(at: [IndexPath],with: .none)

我知道细胞会在以后重新加载所有东西 tableView.reloadData()


我尝试了以下方法。

cell.count = 2
Run Code Online (Sandbox Code Playgroud)

indexPath= [0,0][0,1]

tableView.reloadRows(at: [[0,0] as IndexPath],with: .none)
tableView.reloadRows(at: [[0,1] as IndexPath],with: .none)
Run Code Online (Sandbox Code Playgroud)

但是,结果未达到预期。

重新加载所有tableView.reloadRows()单元格和重新加载单元格之间的行为是否有所不同tableView.reloadData()

uitableview tableview ios swift swift3

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

Swift 4排序多维数组

对于Swift来说,我很新,我有一个包含500条记录的多维数组

[10, 2, 4, 10, 23, 56]
[0, 12, 14, 20, 28, 42]
[0, 2, 4, 10, 26, 54]
[1, 24, 34, 40, 47, 51]
[1, 23, 24, 30, 33, 50]
Run Code Online (Sandbox Code Playgroud)

这样我就可以

[0, 2, 4, 10, 26, 54]
[0, 12, 14, 20, 28, 42]
[1, 23, 24, 30, 33, 50]
[1, 24, 34, 40, 47, 51]
[10, 2, 4, 10, 23, 56]
Run Code Online (Sandbox Code Playgroud)

我个人记录很好。
但是,当查看500条记录时,要对我使用的第一列的记录进行排序 arr.sort { $0[0] < $1[0] }。效果很好,我需要将其扩展到第2、3、4、5、6列。我希望能够按1、2、3、4、5、6的顺序对列进行排序。

arrays sorting multidimensional-array swift

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