То, что вы пытаетесь сделать, абсолютно законно - вы действительно можете преобразовать строку в селектор, а затем передать этот селектор в пункт меню.
Однако вы пытаетесь использовать синтаксис буквенного выбора селектора для инициализации Selector
, давая этому языку построить Selector
в качестве аргумента (который просто синтаксически неверен), где на самом деле вы можете просто передать Selector
, возвращенный NSSelectorFromString
, на вызов инициализатора NSMenuItem.
Синтаксис буквенного синтаксиса #selector
используется, когда у вас есть «фиксированный» селектор, в котором вы хотите создать Selector
для (например, метод экземпляра класса, в котором вы находитесь). NSSelectorFromString
предназначен для таких случаев, как ваш, где селектор является переменной (теперь, когда в Swift 2.2 действительно имеется некоторый синтаксис, заданный для #selector
литералов!) [/ G2]
import Cocoa
class MenuArrayObject
{
var title: String = "Foo"
var subMenuTitles: [String] = ["foo"]
var subMenuSelectors: [String] = ["foobar"]
}
let menuArrayObject = MenuArrayObject()
let indexMenu = NSMenu()
for (i, submenuTitle) in menuArrayObject.subMenuTitles.enumerate() {
let selectorStr = menuArrayObject.subMenuSelectors[i]
let selector = NSSelectorFromString(selectorStr)
let item = NSMenuItem(title: submenuTitle, action: selector, keyEquivalent: "")
indexMenu.addItem(item)
}
Как я уже упоминал в своем комментарии, вы не можете установить шрифт, размер шрифта или поля в текстовом файле. Что можно и нельзя делать в текстовом файле: https://www.computerhope.com/issues/ch001872.htm Вы можете сделать это с помощью расширенного текстового файла (.rtf) следующим образом. Я использовал пакет nuget "DotNetRtfWriter".
using HooverUnlimited.DotNetRtfWriter;
...
public void SaveMyFile(string datastring)
{
RtfDocument doc = new RtfDocument(
HooverUnlimited.DotNetRtfWriter.PaperSize.Letter,
PaperOrientation.Portrait,
Lcid.English);
doc.Margins[Direction.Top] = 1 * 72;
doc.Margins[Direction.Left] = 1.25f * 72;
doc.Margins[Direction.Bottom] = 1 * 72;
doc.Margins[Direction.Right] = 1.25f * 72;
doc.SetDefaultFont("LinoScript");
RtfParagraph para = doc.AddParagraph();
RtfCharFormat format = para.AddCharFormat();
format.FontSize = 24;
para.SetText(datastring);
doc.Save(@textBox1.Text.Trim() + numericUpDown1.Value.ToString() + "image.rtf");
}