在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)
这样我甚至没有为按钮声明一个显式函数.我知道我可以使用按钮标签,但我更愿意这样做.
我目前正在开发一个使用 SwiftUI 的 iOS 项目。我有 3 个页面(MainMenu、CalendarList 和 DateDetails。)
在第二页(CalenderList)上,屏幕顶部和实际的 NavigationBarTitle 之间有一个空白区域。

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

我见过人们使用 .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) 我正在尝试存储字典 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列表可能很长
谢谢!
对于我的应用程序,我使用"加载更多底部"属性,如下所示.它实际上工作得很好; 唯一的问题是,当用户到达按钮时,当加载更多功能正在工作时,对于用户来说,它看起来像应用程序冻结了一段时间,因为没有像中的动画视图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) 我已下载Xcode 10 beta2并重建我的项目,代码如下:
let someView = UIView()
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
Cannot invoke initializer for type 'UIView' with no arguments

很奇怪.使用Xcode 10 beta2时是否有人遇到过这些构建错误?
我试图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)
有没有更简单的方法来写这个,可能更简洁?
在我的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,但如果我没有在我的代码中明确地调用它,那么可能导致调用它的原因是什么?可以自动布局调用此方法......?
请考虑以下涉及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?
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()?
对于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的顺序对列进行排序。