我有一个包含3个对象的数组,如下所示:
class AClass {
var distance: Int?
}
let obj0 = AClass()
obj0.distance = 0
let obj1 = AClass()
obj1.distance = 1
let obj2 = AClass()
obj2.distance = 2
let arr = [obj0, obj1, obj2]
Run Code Online (Sandbox Code Playgroud)
当我减少数组并将其分配给变量时,我只能对数组中的最后一个元素求和.
let total = arr.reduce(0, {$1.distance! + $1.distance!}) //returns 4
Run Code Online (Sandbox Code Playgroud)
如果我尝试$ 0.distance!它的错误是"没有更多的上下文,表达式是模棱两可的".
我试着更明确:
var total = arr.reduce(0, {(first: AClass, second: AClass) -> Int in
return first.distance! + second.distance!
})
Run Code Online (Sandbox Code Playgroud)
但是"'Int'的错误与上下文类型'_'不兼容"如何将其减少到距离的总和?
@IBAction func addToCart(sender: AnyObject) {
let itemObjectTitle = itemObject.valueForKey("itemDescription") as! String
let alertController = UIAlertController(title: "Add \(itemObjectTitle) to cart?", message: "", preferredStyle: .Alert)
let yesAction = UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default) { (action) in
var tabArray = self.tabBarController?.tabBar.items as NSArray!
var tabItem = tabArray.objectAtIndex(1) as! UITabBarItem
let badgeValue = "1"
if let x = badgeValue.toInt() {
tabItem.badgeValue = "\(x)"
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么我不能做+ ="(x)"
错误:二元运算符'+ ='不能应用于'String?'类型的操作数 和'字符串'
我希望每次用户选择"是"时它增加1.现在显然它只停留在1.
我的密码强度标准如下:
8个字符长度无特殊字符Atleast 1个数字Atleast 1个字母
我正在寻找IntegerSwift 并将其转换为罗马数字String。有任何想法吗?
感谢此论坛中的各种有用帖子,我有一些代码可用于获取单个用户选择的NSURL的创建日期.但是,我无法使代码适用于硬编码的NSURL,也不能通过NSFileManager枚举器进行循环.
我不是专业的程序员; 我制作的应用程序是办公室的工具.我的最终目标是简单地根据创建日期对NSURL对象数组进行排序.
我正在使用的代码如下,其功能正常,但如果我尝试使用注释行来评估特定的PDF文件,我会收到以下错误:
当我尝试将此代码添加到通过NSFileManager枚举器获取的NSURL对象循环时,我得到完全相同的错误.
我无法弄清楚如何使用错误指令来解决问题.如果有人可以提供帮助,那将是巨大的.谢谢.
let chosenURL = NSOpenPanel().selectFile
//let chosenURL = NSURL.fileURL(withPath: "/Users/craigsmith/Desktop/PDFRotator Introduction.pdf")
do
{
var cr:AnyObject?
try chosenURL?.getResourceValue(&cr, forKey: URLResourceKey.creationDateKey)
if (cr != nil)
{
if let createDate = cr as? NSDate
{
print("Seems to be a date: \(createDate)")
let theComparison = createDate.compare(NSDate() as Date)
print("Result of Comparison: \(theComparison)") // Useless
let interval = createDate.timeIntervalSinceNow
print("Interval: \(interval)")
if interval < (60*60*24*7*(-1))
{
print("More than a week ago")
}
else
{
print("Less than a week ago")
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试将两个日期字符串组合成一种格式,以允许新的单个日期.第一个字符串是.long样式格式字符串.第二个字符串只是一个时间字符串.值看起来像这样:
let date = "March 24, 2017"
let time = "7:00 AM"
Run Code Online (Sandbox Code Playgroud)
我需要组合这些字符串以形成一个新的日期,作为iOS快速日期.我已经尝试了各种DateFormatters并将字符串合并在一起但是.Long for date和.short for time的组合似乎不起作用.
我有一个唯一的问题。我无法关闭电子邮件窗口。我正在使用Xcode 8。
电子邮件在我第一次打开时可以正确关闭,但是如果我再次打开它则不会。如果我按“取消”,则不能选择“删除草稿”。如果我按“发送”,则发送电子邮件,但窗口不会关闭。
我的代码如下。在mailComposeController被称为正确的第一次,但它从来没有被称为第二次。有人对我缺少的东西有任何想法吗?
let mail = MFMailComposeViewController()
func sendEmail(body: String, subject: String) {
if MFMailComposeViewController.canSendMail() {
mail.mailComposeDelegate = self
mail.setSubject(subject)
mail.setMessageBody("\(body)", isHTML: false)
if let data = (body as NSString).data(using: String.Encoding.utf8.rawValue){
//Attach File
mail.addAttachmentData(data, mimeType: "text/plain", fileName: "data.txt")
}
present(mail, animated: true)
} else {
// show failure alert
}
}
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud) Xcode 8.3.2 我在命令列表中找不到 QLPreviewPanel 并且我不知道如何做(必须使用哪个命令)在 ViewController 中显示文件预览。
假设我已经有一个数组,ViewHolder其中viewHolderList: [ViewHolder]. 我希望所有isMarried元素字段在一行中都为“ false ”而不循环。
struct ViewHolder {
var name: String?
var age: Int?
var isMarried: Bool = true
}
Run Code Online (Sandbox Code Playgroud) 现在,我有以下内容:
private var currencyFormatter: NumberFormatter = {
let f = NumberFormatter()
// allow no currency symbol, extra digits, etc
f.isLenient = true
f.numberStyle = .currency
return f
}()
Run Code Online (Sandbox Code Playgroud)
TextField("Total", value: $totalInput, formatter: currencyFormatter)
.font(.largeTitle)
.padding()
.background(Color.white)
.foregroundColor(Color.black)
.multilineTextAlignment(.center)
Run Code Online (Sandbox Code Playgroud)
我希望文本字段以 0.00 美元作为占位符开始,但是当用户开始输入时,前两个输入将以美分填充...因此 5055 将逐渐显示为:
步骤 1(用户点击 5 次):0.05 美元
步骤 2(用户点击 0 次):0.50 美元
步骤 3(用户点击 5 次):5.05 美元
步骤 4(用户点击 5 次):50.55 美元
如果金额大于 $999,则将插入逗号。
如何实现这一目标?现在我的totalInput 类型是Double?。